PySpark读取合法JSON文件生成DataFrame值全为Null的问题求助
JSON格式不符合Spark默认解析要求
Spark默认采用JSON Lines格式(每行一个独立的JSON对象),如果你的文件是数组包裹的JSON(如[{"key":1},{"key":2}])或格式化的多行单对象,Spark会将整个文件视为单条记录,字段无法匹配导致全Null。解决:添加multiLine参数,df = spark.read.option("multiLine", True).json(path)字段大小写不匹配
Spark对字段名大小写敏感,若原始JSON的字段名(如"UserName")与推断的Schema字段名(如"username")大小写不一致,值无法映射会显示Null。检查字段名的大小写是否完全匹配。隐性数据类型不兼容
虽然Spark识别出了Schema,但JSON实际数据类型与推断类型不兼容时,值会被置为Null。例如Schema推断某字段为IntegerType,但JSON中该字段是字符串值(如"100"而非100),或嵌套结构类型不匹配。可通过df.printSchema()对比原始JSON的实际数据类型。文件读取异常
路径指向空文件/空目录,或文件权限不足,会导致Spark能推断Schema但读取不到有效数据。可直接查看文件内容确认(如Databricks用dbutils.fs.head(path))。JSON格式损坏
部分JSON对象包含未转义的特殊字符(如未转义的引号、换行符),导致解析失败,但Spark仍能从正常对象推断Schema,最终显示全Null。用JSON校验工具检查文件完整性。编码不匹配
若JSON使用Spark默认不支持的编码(如GBK),解析时会失败导致值为Null。解决:指定编码参数,df = spark.read.option("encoding", "GBK").json(path)
内容的提问来源于stack exchange,提问作者Mahi

