Spark 解析 JSON 仅包含数组和整数

Posted

技术标签:

【中文标题】Spark 解析 JSON 仅包含数组和整数【英文标题】:Spark parse JSON consisting of only array and integer 【发布时间】:2017-01-30 20:37:47 【问题描述】:

我有一个包含一行的文件

[[1],[2,3]]

我认为这是一个有效的 json 文件,我想在 Spark 中读取它,所以我尝试了

df = spark.read.json('file:/home/spark/testSparkJson.json')
df.head()
Row(_corrupt_record=u'[[1],[2,3]]')

在我看来,Spark 无法解析此文件,我希望 Spark 将其作为 Array of Array of Array of Array in a column 读取,以便我可以拥有

df.head()
Row(sequence=[[1], [2, 3]])
df.printSchema()
root
 |-- sequence: array (nullable = true)
 |    |-- element: array (containsNull = true)
 |    |    |-- element: long (containsNull = true)

我该怎么做?

我现在在 Spark 2.1.0 中使用 pyspark,也欢迎任何基于其他语言/以前版本的解决方案。

【问题讨论】:

【参考方案1】:

Spark 要求每个 json 行都有一个 json 字典,并且你有数组。如果您将文件内容更改为:

"sequence": [[1],[2,3]]

然后 spark 将根据需要创建架构:

>>> spark.read.json("/tmp/sample.json").printSchema()
root
 |-- sequence: array (nullable = true)
 |    |-- element: array (containsNull = true)
 |    |    |-- element: long (containsNull = true)

【讨论】:

以上是关于Spark 解析 JSON 仅包含数组和整数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Newtonsoft.Json 将包含数组数组的 json 对象解析为 C# 中的对象列表?

如何仅将一些选定的 Json 数组和 Json 对象从 Url 解析到 android 设备

C# 解析JSON格式数据

Python 解析 JSON 数组

Sencha Touch 2- 解析存储包含数组的 JSON 文件

IOS JSON解析包含多个数组