apache-spark - 即使将多行选项设置为 true,Spark 也不会在单个文件中加载所有多行 json 对象
问题描述
我的 json 文件如下所示,它有两个多行 json 对象(在一个文件中)
{
"name":"John Doe",
"id":"123456"
}
{
"name":"Jane Doe",
"id":"456789"
}
因此,当我加载多行 json 数据帧时,它应该加载两个 json,而不是仅加载第一个 json 对象。如何在单个文件中加载所有多行 json 对象?
val rawData = spark.read.option("multiline", true).option("mode", "PERMISSIVE").format("json").load("/tmp/search/baggage/test/1")
scala> rawData.show
+------+--------+
| id| name|
+------+--------+
|123456|John Doe|
+------+--------+
scala> rawData.count
res20: Long = 1
解决方案
您的输入 JSON 无效,因为您有多个对象,它会丢失括号。您可以使用任何 json 验证器工具进行检查。这就是为什么multiLine
option 在这种情况下不起作用的原因。
也就是说,我认为您想使用JsonLines格式,其中每行代表一个 JSON 对象。
{"name":"John Doe","id":"123456"}
{"name":"Jane Doe","id":"456789"}
Spark 无需设置multiline
选项即可读取此 JSON:
val df = spark.read.json("file:///your/json/file.json")
df.show()
输出 :
+------+--------+
| id| name|
+------+--------+
|123456|John Doe|
|456789|Jane Doe|
+------+--------+
推荐阅读
- php - 未为 SMTP 电子邮件正确设置联系表单 PHP 文件且未发送
- vue.js - 从其他自定义组件构建自定义组件时如何启用 v-model 绑定
- excel - 如何在 VBA 中监视 SheetChange 在一个范围内,而不仅仅是在带有下拉列表的单元格上
- c# - 如何反序列化包含列表的数组?
- c# - 无法执行查询,因为日期时间不会转换为字符串 c#/MSSQL
- reactjs - 使用 react-apollo 重新获取查询:为什么“加载”不正确?
- java - 如何修复测试后打开应用程序然后截屏的报告
- jquery - Symfony:使用 ajax 更新值
- python - django application field loaded from already created database and not initialized from the django code
- oauth-2.0 - 是获取 Google Docs OAuth 2.0 的任何方式。访问令牌,存在时间超过 3600 秒?