You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark提取JSON字段结果全为Null问题求助

问题原因及解决方案

核心问题

提取字段全为Null的根本原因是Spark CSV读取器错误解析了包含双引号的JSON字符串:
Spark默认将双引号(")视为CSV字段的包裹符,而你的jsonColumn中的JSON内容本身包含大量双引号,读取时Spark会把JSON内部的双引号误判为字段的结束标记,导致最终得到的jsonColumn内容是残缺、格式无效的JSON字符串,自然无法用get_json_object提取出有效值。

解决方案

方案1:修正CSV读取参数,正确解析JSON字段

读取CSV时指定escape="\"",让Spark识别JSON内部的双引号是转义后的内容,而非字段包裹符;或者直接禁用CSV的引号解析逻辑:

%python
from pyspark.sql import SparkSession 
from pyspark.sql.functions import get_json_object

spark=SparkSession.builder.appName('practice').getOrCreate()

# 方法A:指定escape字符处理JSON内的双引号
df2 = spark.read.csv('/FileStore/test1.csv', header=True, escape='"')

# 方法B:直接禁用引号解析(适合JSON字段没有被额外双引号包裹的场景)
# df2 = spark.read.csv('/FileStore/test1.csv', header=True, quote="")

df2_extractJSON = df2.withColumn("_timestamp", get_json_object(df2.jsonColumn, "$._timestamp"))\
                     .withColumn("page", get_json_object(df2.jsonColumn, "$.page"))\
                     .withColumn("object", get_json_object(df2.jsonColumn, "$.object"))\
                     .withColumn("subObject", get_json_object(df2.jsonColumn, "$.subObject"))

df2_extractJSON.show()

方案2:使用from_json配合Schema解析(更推荐)

这种方式不仅能避免解析错误,还能明确指定字段类型,更适合生产环境:

%python
from pyspark.sql import SparkSession 
from pyspark.sql.functions import from_json
from pyspark.sql.types import StructType, StructField, StringType

spark=SparkSession.builder.appName('practice').getOrCreate()

# 定义JSON对应的Schema
json_schema = StructType([
    StructField("_timestamp", StringType(), nullable=True),
    StructField("page", StringType(), nullable=True),
    StructField("object", StringType(), nullable=True),
    StructField("subObject", StringType(), nullable=True)
])

# 读取CSV时修正解析参数
df2 = spark.read.csv('/FileStore/test1.csv', header=True, escape='"')

# 解析JSON并提取字段
df2_extractJSON = df2.withColumn("parsed_json", from_json(df2.jsonColumn, json_schema))\
                     .select(
                         "parsed_json._timestamp",
                         "parsed_json.page",
                         "parsed_json.object",
                         "parsed_json.subObject"
                     )

df2_extractJSON.show()

验证步骤

可以先执行df2.select("jsonColumn").show(truncate=False)查看jsonColumn的实际内容,如果显示的是残缺的JSON(比如只到第一个双引号前的内容),就说明是CSV读取时的引号解析问题,按上述方案修正即可。

内容的提问来源于stack exchange,提问作者peace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 19:45:49