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

