从文件读取 Json 数组到 Spark Dataframe

Read Array Of Jsons From File to Spark Dataframe

我有一个 gzip 压缩的 JSON 文件,其中包含 JSON 的数组,如下所示:

[{"Product":{"id"1,"image":"/img.jpg"},"Color":"black"},{"Product":{"id"2,"image":"/img1.jpg"},"Color":"green"}.....]

我知道这不是读入 Scala 的理想数据格式,但是除了以这种方式处理提要之外别无选择。

我试过了:

spark.read.json("file-path") 

这似乎需要很长时间(如果您的数据以 MB 为单位,则处理速度非常快,但是对于 GB 的数据则需要很长时间),可能是因为 spark 无法拆分文件并分发给其他执行程序.

想看看是否有任何方法可以预处理这些数据并将其作为数据帧加载到 spark 上下文中。

我想要的功能似乎类似于:Create pandas dataframe from json objects。但我想看看是否有任何 scala 替代方案可以做类似的并将数据转换为 spark RDD/dataframe。

您可以使用 spark.read().text("gzip-file-path") 读取 "gzip" 文件。由于 Spark API 构建在 HDFS API 之上,因此 Spark 可以读取 gzip 文件并将其解压缩以读取文件。

https://github.com/mesos/spark/blob/baa30fcd99aec83b1b704d7918be6bb78b45fbb5/core/src/main/scala/spark/SparkContext.scala#L239

但是,gzip 是不可拆分的,因此 spark 创建了一个具有单个分区的 RDD。因此,使用 spark 读取 gzip 文件没有意义。

您可以解压缩 gzip 文件并阅读解压缩的文件以充分利用分布式处理架构。

似乎是提供给 spark 进行处理的数据格式有问题。我必须预处理数据以将格式更改为 spark 友好格式,然后 运行 spark 对其进行处理。这是我最后做的预处理:https://github.com/dipayan90/bigjsonprocessor/blob/master/src/main/java/com/kajjoy/bigjsonprocessor/Application.java