簡體   English   中英

如何使用Python處理Spark Dataframe中的NullType?

[英]How to handle NullType in Spark Dataframe using Python?

我正在嘗試將MapR DB中的數據加載到Spark DF中。 然后,我只是想將DF導出到CSV文件。 但是,我得到的錯誤是:

“ com.mapr.db.spark.exceptions.SchemaMappingException:無法解析數據類型為NullType的值(當前令牌:STRING)”

我通過將列強制轉換為StringType嘗試了幾種方法。 這是其中之一:

df = spark.loadFromMapRDB(db_table).select(
F.col('c_002.v_22').cast(T.StringType()).alias('aaa'),
F.col('c_002.v_23').cast(T.StringType()).alias('bbb')
)

print(df.printSchema())

PrintSchema的輸出:

root
 |-- aaa: string (nullable = true)
 |-- bbb: string (nullable = true)

“ aaa”和“ bbb”列中的值可以為空。 然后,我嘗試將df導出到CSV文件:

df = df.repartition(10)
df.write.csv(csvFile, compression='gzip', mode='overwrite', sep=',', header='true', quoteAll='true')

我在使用MapR-DB JSON表時遇到了類似的問題,並且能夠通過在加載到DataFrame中時定義表架構來解決:

tableSchema = StructType([
    StructField("c_002.v_22", StringType(), True), # True here signifies nullable: https://spark.apache.org/docs/2.3.1/api/python/pyspark.sql.html?highlight=structfield#pyspark.sql.types.StructField
    StructField("c_002.v_23", StringType(), True),
])

df = spark.loadFromMapRDB(db_table, tableSchema ).select(
F.col('c_002.v_22').alias('aaa'),
F.col('c_002.v_23').alias('bbb')
)

您可以嘗試做的另一件事就是簡單地用一些東西填充空值: https : //spark.apache.org/docs/2.3.1/api/python/pyspark.sql.html#pyspark.sql.DataFrame.fillna

df = df.na.fill('null')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM