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

PySpark读取嵌套JSON报错:file5.JSON读取失败原因排查

问题分析与解决方法

错误原因

这个异常说明Spark解析file5.json时,所有记录都被判定为损坏数据,导致生成的DataFrame仅包含_corrupt_record列。Spark 2.3及以后版本禁止对这种仅含损坏列的DataFrame执行查询操作,因此抛出该错误。而file4.json能正常读取,说明其格式符合Spark JSON读取的要求,file5.json存在格式或语法问题。

排查与解决步骤

  • 检查JSON格式是否为JSON Lines
    Spark默认要求JSON文件采用JSON Lines格式(每行一个独立的JSON对象)。如果file5.json是一个包含多个对象的大数组(而非每行一个对象),需要添加multiline选项让Spark解析整个文件内容:

    df = spark.read.format("json") \
        .option("inferschema", "true") \
        .option("mode", "permissive") \
        .option("multiline", "true") \
        .load("/FileStore/tables/nested-2.json")
    df.show()
    

    同时可以查看损坏记录的具体内容,定位错误:

    df.select("_corrupt_record").show(truncate=False)
    
  • 校验JSON语法正确性
    file5.json可能存在语法错误,比如:

    • 缺失/多余的括号、引号
    • 末尾元素后多余的逗号
    • 特殊字符未正确转义
      可以用本地JSON校验工具检查文件语法,修复错误后再尝试读取。
  • 检查文件编码
    确保文件采用UTF-8编码(Spark默认编码),如果是其他编码(如GBK),需指定编码选项:

    df = spark.read.format("json") \
        .option("inferschema", "true") \
        .option("mode", "permissive") \
        .option("encoding", "GBK") \
        .load("/FileStore/tables/nested-2.json")
    
  • 丢弃损坏记录
    如果文件仅部分记录损坏,可改用dropMalformed模式直接丢弃损坏记录,保留正常数据:

    df = spark.read.format("json") \
        .option("inferschema", "true") \
        .option("mode", "dropMalformed") \
        .option("multiline", "true") \
        .load("/FileStore/tables/nested-2.json")
    df.show()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:42:14