使用 Scala/Spark 读取 Json 文件
Posted
技术标签:
【中文标题】使用 Scala/Spark 读取 Json 文件【英文标题】:Read Json file with Scala/Spark 【发布时间】:2021-12-07 07:48:07 【问题描述】:我正在尝试读取一个 json,例如:
"id1":
"a": "7",
"b": "3",
"c": "10",
"d": "10",
"e": "15",
"f": "11",
"g": "2",
"h": "7",
"i": "5",
"j": "14"
,
"id2":
"a": "3",
"b": "7",
"c": "12",
"d": "4",
"e": "10",
"f": "4",
"g": "13",
"h": "4",
"i": "1",
"j": "13"
,
"id3":
"a": "10",
"b": "6",
"c": "1",
"d": "1",
"e": "13",
"f": "12",
"g": "9",
"h": "6",
"i": "7",
"j": "4"
当我使用 spark.read.json ("file.json") 处理它时,它会返回一条具有这种格式的记录:
+-----------------------------------+---------------------------------------+---------------------------------+
|id1 |id2 |id3 |
+-----------------------------------+---------------------------------------+---------------------------------+
|7, 3, 10, 10, 15, 11, 2, 7, 5, 14|322539, 7, 12, 4, 10, 4, 13, 4, 1, 13|10, 6, 1, 1, 13, 12, 9, 6, 7, 4|
+-----------------------------------+---------------------------------------+---------------------------------+
我希望处理文件时的结果是这样的:
+-----+------+------+------+------+------+------+------+------+------+-------+
| id | col1 | col2 | col3 | col4 | col5 | col6 | col7 | col8 | col9 | col10 |
+-----+------+------+------+------+------+------+------+------+------+-------+
| id1 | 7 | 3 | 10 | 10 | 15 | 11 | 2 | 7 | 5 | 14 |
+-----+------+------+------+------+------+------+------+------+------+-------+
| id2 | 3 | 7 | 12 | 4 | 10 | 4 | 13 | 4 | 1 | 13 |
+-----+------+------+------+------+------+------+------+------+------+-------+
| id3 | 10 | 6 | 1 | 1 | 13 | 12 | 9 | 6 | 7 | 4 |
+-----+------+------+------+------+------+------+------+------+------+-------+
一些简单快捷的方法?
谢谢
【问题讨论】:
请提供足够的代码,以便其他人更好地理解或重现问题。 【参考方案1】:你能修改你的输入 JSON 文件吗?如果是这样,将其设置为 JS 对象数组将使用 spark.read.json() 完成工作:
[
"id": "id1",
"a": "7",
"b": "3",
"c": "10",
"d": "10",
"e": "15",
"f": "11",
"g": "2",
"h": "7",
"i": "5",
"j": "14"
,
...
]
【讨论】:
如果进行了此更改,您能否提供解决方案的代码? 我无法编辑它,我收到了这样的格式。 你用 spark 读取的这个文件有多大?如果它不大,则使用一些 json lib 读取它,然后在处理后创建 df 。如果它真的很大,你就有问题了。顺便说一句,afaik,json 对象数组也不起作用“请注意,作为 json 文件提供的文件不是典型的 JSON 文件。每一行必须包含一个单独的、自包含的有效 JSON 对象。有关更多信息,请参阅 JSON Lines 文本格式,也称为换行符分隔的 JSON。” (在这里spark.apache.org/docs/latest/sql-data-sources-json.html)以上是关于使用 Scala/Spark 读取 Json 文件的主要内容,如果未能解决你的问题,请参考以下文章
Azure Datalake Store Gen2 使用 scala spark 库从 Databricks 读取文件
如何在 Scala/Spark 中为数据框中的每一行编写一个 Json 文件并重命名文件