Databricks中使用PySpark JSON Schema解析时_corrupt_record列返回NULL值问题求助
解决PySpark解析嵌套JSON时除首字段外全为NULL的问题
你遇到的核心问题主要来自两个方面:API返回的JSON格式不符合Spark默认解析标准,以及自定义Schema的类型定义错误。下面是针对性的分步解决方案:
问题根源拆解
- JSON格式不规范:你提供的示例JSON使用了单引号(
'),但Spark的JSON解析器仅默认支持双引号(")的标准JSON格式,这会导致嵌套结构无法被正确识别。 - Schema类型误用:你给
Var4和Var9指定了NullType(),这个类型表示字段只能是null值,而非"允许为null的字符串类型"。当API返回的字段是null但实际应为字符串类型时,Spark会因类型不匹配返回NULL。
具体解决方案
步骤1:标准化API返回的JSON字符串
先把每个单引号格式的JSON转换成标准双引号格式:
import requests import json response = requests.get(api_url, headers=api_call_header) api_json = response.json() # 假设返回的是JSON字符串列表 # 将单引号JSON转成标准双引号格式 standardized_json = [json.dumps(json.loads(item.replace("'", '"'))) for item in api_json]
步骤2:创建原始字符串列的DataFrame
不要直接用spark.read.json读取并行化后的RDD,先创建一个只包含JSON字符串的基础DataFrame:
from pyspark.sql import SparkSession from pyspark.sql.functions import col, from_json from pyspark.sql.types import StructType, StructField, StringType spark = SparkSession.builder.getOrCreate() # 构建每行仅包含一个JSON字符串的DataFrame df_raw = spark.createDataFrame([(s,) for s in standardized_json], ["json_str"])
步骤3:修正自定义Schema
把NullType()替换为允许为null的StringType()(nullable=True为默认属性,可省略):
schema = StructType([ StructField('Var1', StringType()), StructField('Var2', StructType([ StructField('Var3', StringType()), StructField('Var4', StringType()), # 替换NullType为StringType StructField('Var5', StringType()), StructField('Var6', StringType()), StructField('Var7', StringType()), StructField('Var8', StringType()) ])), StructField('Var9', StringType()), # 替换NullType为StringType StructField('Var10', StringType()) ])
步骤4:解析JSON并展开嵌套结构
使用from_json解析字符串列,再将结构体字段展开到顶层:
# 解析JSON字符串为结构体类型 df_parsed = df_raw.withColumn("parsed_data", from_json(col("json_str"), schema)) # 展开嵌套结构体的所有字段 df_final = df_parsed.select("parsed_data.*") display(df_final)
为什么之前的尝试失败?
- 自定义Schema错误:
NullType是特殊类型,仅匹配严格的null值,而API返回的Var4/Var9属于"可为null的字符串",必须用StringType()。 - multiLine=True误用:该参数用于读取多行JSON文档,你的数据是单行JSON字符串列表,因此不适用。
- RDD推导Schema失效:原始JSON的单引号格式导致Spark无法正确识别嵌套结构,只能解析表层字段。
内容的提问来源于stack exchange,提问作者pl1984
相关产品推荐
相关产品推荐

