在从 JSON 字符串中解析某个字段时,from_json 函数在 Apache Spark 3.0 中会返回 null 值,而不是期望的默认值。
解决这个问题的方法是,在 from_json 函数中指定默认值。具体来说,将 from_json 函数的第二个参数作为默认值传递给它。例如,假设我们想要从名为 "data" 的 JSON 字符串中提取名为 "foo" 的字段,并将缺失的值替换为一个默认值 0:
from pyspark.sql.functions import from_json
from pyspark.sql.types import StructType, StructField, StringType, IntegerType
schema = StructType([StructField("foo", IntegerType(), True)])
df = spark.createDataFrame([(1, '{"data": {"foo": 42}}'), (2, '{"data": {}}')], ["id", "json_data"])
df = df.withColumn("parsed_json", from_json(df.json_data, schema).getField("foo"))
df = df.fillna({"parsed_json": 0})
在执行上面的代码后,df 的输出将如下所示:
+---+----------------------+------------+
|id |json_data |parsed_json |
+---+----------------------+------------+
|1 |{"data": {"foo": 42}} |42 |
|2 |{"data": {}} |0 |
+---+----------------------+------------+
这样我们就能够在解析 JSON 数据时,将缺失的值替换为默认值了。