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
相关产品推荐
相关产品推荐

