json数组

hwamh0ep  于 2021-07-09  发布在  Spark
关注(0)|答案(1)|浏览(327)

我有一个json数组文件,如下所示:

["{\"timestamp\":1616549396892,\"id\":\"1\",\"events\":[{\"event_type\":\"ON\"}]}",{"meta":{"headers":{"app":"music"},"customerId":"2"}}]

我有一个json文件,节点如下所示:
我试图通过sparkshell在scala中读取这个文件。

val s1 = spark.read.json("path/to/file/file.json")

但是,这会导致损坏的\u记录错误:

org.apache.spark.sql.DataFrame = [_corrupt_record: string]

我也试过这样读:

val df = spark.read.json(spark.sparkContext.wholeTextFiles("path.json").values)
val df = spark.read.option("multiline", "true").json("<file>")

但还是一样的错误。
因为json数组包含字符串和json对象,所以我无法读取它。
有人能解释一下这个错误吗?我们如何通过spark udf阅读?

plicqrtu

plicqrtu1#

是的,原因是文本和实际json对象的混合。在我看来,这两个条目似乎属于同一个条目,所以为什么不将模式改成这样:

{"meta":{"headers": {"app": "music"},"customerId": "2"},"data": "{\"timestamp\":1616549396892,\"id\":\"1\",\"events\":[{\"event_type\":\"ON\"}]}"}

新行也意味着新记录,因此对于多个事件,您的文件将如下所示:

{"meta":{"headers": {"app": "music"},"customerId": "2"},"data": "{\"timestamp\":1616549396892,\"id\":\"1\",\"events\":[{\"event_type\":\"ON\"}]}"}
{"meta":{"headers": {"app": "music"},"customerId": "2"},"data": "{\"timestamp\":1616549396892,\"id\":\"2\",\"events\":[{\"event_type\":\"ON\"}]}"}

相关问题