Spark DataFrameWriter忽略无效字段

weylhg0b  于 2022-11-25  发布在  Apache
关注(0)|答案(3)|浏览(129)

我的DataFrame包含多个具有不同架构的null

df.show(false)
+----+----+----+----+
|col1|col2|col3|col4|
+----+----+----+----+
|null|null|1   |a   |
+----+----+----+----+

我尝试将此 Dataframe 作为JSON文件写入HDFS,但Spark在写入JSON时忽略了空字段。
但即使我用

spark.write.option("ignoreNullFields", "false").json(...)

spark.write.option("ignoreNullFields", false).json(...)

包含空值的列将被忽略。
使用ignoreNullFields选项时是否遗漏了什么?

voase2hg

voase2hg1#

您未正确使用ignoreNullFields选项
正确做法是:

df.coalesce(1).write.mode('overwrite').json(ignoreNullFields=False,path="a")

同时保留仅包含空值的列

k10s72fa

k10s72fa2#

将其作为配置设置放入SparkSession

spark.conf.set("spark.sql.jsonGenerator.ignoreNullFields", false)
f1tvaqid

f1tvaqid3#

对于来自未来的人们:利用PySpark 3.2.1,原来的“有问题的”解决方案现在可以工作了。

from pyspark.sql import SparkSession

spark = SparkSession \
    .builder \
    .master("local[*]") \
    .appName("Python Spark SQL basic example") \
    .getOrCreate()

data = [
[1, "2022-07-08 01:55:58", 1657238158],
[2, "2022-07-08 01:55:52", None],
[None, "2022-07-08 01:55:44", 1657238144],
]
columns = ["id", "ts_str_berlin", "ts_unix"]
df = spark.createDataFrame(data=data, schema=columns)

df.write.mode("overwrite").option("ignoreNullFields", False).json("./data/testjson/")

示例性JSON文件内容:

{"id":2,"ts_str_berlin":"2022-07-08 01:55:52","ts_unix":null}

相关问题