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

Spark Java读取JSON文件生成视图出现首尾空行问题求助

问题原因分析

你遇到的首尾全null行问题,根源出在JSON文件的格式不符合Spark默认的读取规则,之前尝试的multiline=true没生效,也是因为文件格式本身存在错误。

Spark默认读取的是JSON Lines格式(又称换行分隔JSON),要求每行是一个独立的合法JSON对象,不需要额外的外层包裹符号。但你的JSON文件外层多了一对{}:

{ 
{"id" : "1201", "name" : "satish", "age" : "25"} 
{"id" : "1202", "name" : "krishna", "age" : "28"} 
}

这两个外层的大括号会被Spark分别解析成两个没有任何键值对的空JSON对象,自然就输出了首尾两行全null的结果。


解决办法

你可以选择以下两种方案中的任意一种来解决:

方案1:改成标准JSON Lines格式

直接去掉文件外层的{},让每个JSON对象单独占一行,最终文件内容如下:

{"id" : "1201", "name" : "satish", "age" : "25"}
{"id" : "1202", "name" : "krishna", "age" : "28"}

这种格式下,你不需要修改任何代码,直接运行原来的Spark代码就能得到正确结果:

+----+-------+----+ 
| id| name| age| 
+----+-------+----+ 
|1201| satish| 25| 
|1202|krishna| 28| 
+----+-------+----+

方案2:改成标准JSON数组格式并开启multiline选项

如果更习惯用数组格式存储JSON,可以把文件改成标准的JSON数组(注意元素之间要加逗号,用[]包裹):

[
{"id" : "1201", "name" : "satish", "age" : "25"},
{"id" : "1202", "name" : "krishna", "age" : "28"}
]

这时候需要在Spark读取时开启multiline=true,让Spark能解析跨多行的JSON数组,修改后的代码如下:

class Something { 
    public void DoSomething() { 
        SparkSession session = SparkSession.builder().appName("jsonreader") 
            .master("local[4]").getOrCreate(); 
        Dataset<Row> jsondataset = session.read() 
            .option("multiline", true) // 开启多行JSON解析
            .json("G:\\data\\employee.json"); 
        jsondataset.select("id","name","age").show(); 
    } 
}

运行后也能正确获取到两行有效数据,不会出现null行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:19:04