【发布时间】:2019-04-12 04:27:46
【问题描述】:
我照常使用from_json Pyspark SQL 函数,例如:
>>> import pyspark.sql.types as t
>>> from pyspark.sql.functions import from_json
>>> df = sc.parallelize(['{"a":1}', '{"a":1, "b":2}', '{"a":1, "b":2, "c":3}']).toDF(t.StringType())
>>> df.show(3, False)
+---------------------+
|value |
+---------------------+
|{"a":1} |
|{"a":1, "b":2} |
|{"a":1, "b":2, "c":3}|
+---------------------+
>>> schema = t.StructType([t.StructField("a", t.IntegerType()), t.StructField("b", t.IntegerType()), t.StructField("c", t.IntegerType())])
>>> df.withColumn("json", from_json("value", schema)).show(3, False)
+---------------------+---------+
|value |json |
+---------------------+---------+
|{"a":1} |[1,,] |
|{"a":1, "b":2} |[1, 2,] |
|{"a":1, "b":2, "c":3}|[1, 2, 3]|
+---------------------+---------+
请注意那些不存在于 JSON 中但在架构中指定的键的解析值为 null(或某种空值?)。
如何避免这种情况?我的意思是,有没有办法将默认值设置为from_json?还是我必须在数据帧的后期处理中添加这样的默认值?
谢谢!
【问题讨论】:
-
对我来说,它会产生正确的输出:
[1,null,null]用于第一行等。所以也许您为 from_json 设置了一些与默认值不同的选项? -
嗨,@gaw,感谢您的回答。我知道这种行为是正确的。我需要知道的是,是否有某种方法可以为 JSON 中不存在的键设置默认值。例如。我怎么能设置它而不是添加一个
null值到列表中,一个0.0值必须添加。 -
我认为直接不可能,文档说明它具有与普通 json 数据源相同的选项参数,但没有 nullValue 或类似选项的选项。因此,您可能需要在后处理步骤中进行此操作
-
明白,非常感谢!
标签: python apache-spark pyspark pyspark-sql