【问题标题】:Read Json file with Scala/Spark使用 Scala/Spark 读取 Json 文件
【发布时间】: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    |
+-----+------+------+------+------+------+------+------+------+------+-------+

一些简单快捷的方法?

谢谢

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: json scala apache-spark


【解决方案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
猜你喜欢
  • 1970-01-01
  • 2018-04-26
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
  • 2017-03-05
  • 2017-01-25
  • 2021-06-18
  • 1970-01-01
相关资源
最近更新 更多