У меня есть набор данных (пример), который при импорте с
df = spark.read.csv(filename, header=True, inferSchema=True)
df.show()
назначит столбец с «NA» как stringType(), где я хотел бы, чтобы он был IntegerType() (или ByteType()).
Затем я попытался установить
schema = StructType([
StructField("col_01", IntegerType()),
StructField("col_02", DateType()),
StructField("col_03", IntegerType())
])
df = spark.read.csv(filename, header=True, schema=schema)
df.show()
Вывод показывает, что вся строка с 'col_03' = null равна нулю.
Однако col_01 и col_02 возвращают соответствующие данные, если они вызываются с
df.select(['col_01','col_02']).show()
Я могу найти способ обойти это, отправив тип данных col_3.
df = spark.read.csv(filename, header=True, inferSchema=True)
df = df.withColumn('col_3',df['col_3'].cast(IntegerType()))
df.show()
, но я думаю, что это не идеально, и было бы намного лучше, если бы я мог назначать тип данных для каждого столбца непосредственно с настройкой схемы.
Может ли кто-нибудь подсказать мне, что я делаю неправильно? Или приведение типов данных после импорта является единственным решением? Любые комментарии относительно производительности двух подходов (если мы сможем заставить работать схему назначения) также приветствуются.
Спасибо,

а>

True or Faseдля нулей, как вStructField("col_03", IntegerType(), True)- person Bala   schedule 09.02.2018