簡體   English   中英

使用 Apache Spark 讀取 JSON 陣列

[英]Reading JSON Array with Apache Spark

我有一個 json 數組文件,如下所示:

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

我有一個 json 文件,節點如下所示:

我正在嘗試通過 spark-shell 在 scala 中讀取此文件。

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

但是,這會導致損壞記錄錯誤:

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 讀取它?

是的,原因是文本和實際 json object 的混合。 在我看來,這兩個條目好像屬於一起,所以為什么不將架構更改為這樣的:

{"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\"}]}"}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM