首页 > 解决方案 > 多行 JSON 未解析

问题描述

控制台
scala> var njson = spark.read.option("multiLine", "true").json("C:/Users/Onkar/Desktop/new.json") njson: org.apache.spark.sql. DataFrame = [_corrupt_record: 字符串]

我的 JSON:

[{
"Name": "Onkar",
"Age": 24,
"Place": "Baramati"
}]

标签: jsonscalaapache-spark

解决方案


在 spark 版本2.2.0中,支持解析 json 对象的数组。json对象的spark解析数组的低版本不支持或解析不正确。

请检查以下代码。

scala> spark.version
res47: String = 2.2.0

scala> "cat /tmp/app.json".!
[{
"Name": "Onkar",
"Age": 24,
"Place": "Baramati",
"Number": 7709526425
}]
res48: Int = 0

scala> val jdf = spark.read.option("multiLine","true").json("/tmp/app.json")
jdf: org.apache.spark.sql.DataFrame = [Age: bigint, Name: string ... 2 more fields]

scala> jdf.printSchema
root
 |-- Age: long (nullable = true)
 |-- Name: string (nullable = true)
 |-- Number: long (nullable = true)
 |-- Place: string (nullable = true)


scala> jdf.show(false)
+---+-----+----------+--------+
|Age|Name |Number    |Place   |
+---+-----+----------+--------+
|24 |Onkar|7709526425|Baramati|
+---+-----+----------+--------+

spark 版本2.1.1有一些问题,因为它没有解析 json 对象的数组&这个问题已在较新的版本中得到修复。

scala> spark.version
res2: String = 2.1.1

scala> val jdf = spark.read.option("multiLine","true").json("/tmp/app.json")
jdf: org.apache.spark.sql.DataFrame = [_corrupt_record: string]

scala> jdf.printSchema
root
 |-- _corrupt_record: string (nullable = true)


推荐阅读