【问题标题】:Spark reading JSON has corrupt columnSpark 读取 JSON 有损坏的列
【发布时间】:2018-04-03 18:28:10
【问题描述】:

这是我的 JSON

[
    {"string":"string1","int":1,"array":[1,2,3],"dict": {"key": "value1"}},
    {"string":"string2","int":2,"array":[2,4,6],"dict": {"key": "value2"}}
]

这是我的解析代码:

val mdf = sparkSession.read.option("multiline", "true").json("multi2.json")
mdf.show(false)

这个输出:

+---------------+---------+--------+----+-------+
|_corrupt_record|array    |dict    |int |string |
+---------------+---------+--------+----+-------+
|[              |null     |null    |null|null   |
|null           |[1, 2, 3]|[value1]|1   |string1|
|null           |[2, 4, 6]|[value2]|2   |string2|
|]              |null     |null    |null|null   |
+---------------+---------+--------+----+-------+

为什么我有一个 _corrupt_record,一切看起来都正常? 为什么 dict 列只给出值而不给出键?

谢谢

【问题讨论】:

  • 使用 multiLine insted of multiline。它有效。

标签: json scala apache-spark apache-spark-sql spark-dataframe


【解决方案1】:

从 Spark 2.2.0 开始支持“multiLine”选项。
对比一下 2.1.0 documentation

使用 > 2.2.0,您的带有数据的示例代码可以正常工作。

关于dict 列,它仍将仅显示值,但保留架构。您可以通过以下方式进行验证:

scala> mdf.printSchema
root
 |-- array: array (nullable = true)
 |    |-- element: long (containsNull = true)
 |-- dict: struct (nullable = true)
 |    |-- key: string (nullable = true)
 |-- int: long (nullable = true)
 |-- string: string (nullable = true)

编辑 我意识到,很多信息已经是here

【讨论】:

  • 很好的答案,当我认为它是 2.2 时,我正在使用 2.1
【解决方案2】:

这是一个错字。选项名称是 multiLine 而不是 multiline

【讨论】:

    猜你喜欢
    • 2020-02-26
    • 1970-01-01
    • 2021-05-09
    • 2019-07-31
    • 2017-06-28
    • 1970-01-01
    • 2015-09-24
    • 2019-09-26
    • 1970-01-01
    相关资源
    最近更新 更多