Я использую функцию from_json
Pyspark SQL, как обычно, например ::100100
>>> 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
? Или я должен добавить такое значение по умолчанию в пост-обработке данных?
Спасибо!