Python from_json Pyspark SQL函数:未找到键的默认值?

Python from_json Pyspark SQL函数:未找到键的默认值?,python,apache-spark,pyspark,pyspark-sql,Python,Apache Spark,Pyspark,Pyspark Sql,我像往常一样使用来自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()) >>

我像往常一样使用来自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
(或某种类型的空值?)

如何避免这种情况?我的意思是,有没有办法从_json
将默认值设置为
?或者我必须在数据帧的后期处理中添加这样一个默认值

谢谢

你可以试试

df=self.spark.createDataFrame(['{a:1}','{a:1,b:2}','{a:1,b:2,c:3}',StringType())
测向显示(3,假)
df=df.withColumn(“a”,get_json_object(“value”,“$.a”))\
.withColumn(“b”,when(get_json_object(“value”),“$.b”).isNotNull(),get_json_object(“value”,“$.b”)。否则(0))\
.withColumn(“c”,when(get_json_object(“value”),“$.c”).isNotNull(),get_json_object(“value”,“$.c”)。否则(0))
测向显示(3,假)
+---------------------+
|价值观|
+---------------------+
|{“a”:1}|
|{“a”:1,“b”:2}|
|{“a”:1,“b”:2,“c”:3}|
+---------------------+
+---------------------+---+---+---+
|值| a | b | c|
+---------------------+---+---+---+
|{“a”:1}|1 | 0 | 0|
|{“a”:1,“b”:2}|1 | 2 | 0|
|{“a”:1,“b”:2,“c”:3}|1 | 2 | 3|
+---------------------+---+---+---+

对我来说,它生成正确的输出:
[1,null,null]
用于第一行等。因此,也许您为from_json设置了一些不同于默认值的选项?您好,@gaw,感谢您的回答。我知道这种行为是正确的。我需要知道的是,是否有某种方法可以为JSON中不存在的键设置默认值。例如,我如何设置它,而不是将
null
值添加到列表中,必须添加
0.0
值。我认为这不可能直接实现,文档说明它与普通json数据源具有相同的选项参数,但没有nullValue或类似的选项。所以,你可能需要在后处理步骤中完成它,非常感谢!