【问题标题】:Read Array Of Jsons From File to Spark Dataframe从文件中读取 Json 数组到 Spark Dataframe
【发布时间】:2018-10-05 02:31:22
【问题描述】:

我有一个包含 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 。

【问题讨论】:

  • 所以如果您已经知道 gzip 是问题所在,除了不使用 gzip 或先解压缩文件之外,您还期望什么样的答案?真的没有什么魔法可以将 gzip 变成 Hadoop / Spark 友好的格式。
  • 同意@user6910411 在 Spark 外部进行拆分。将原始 JSON 存储在 HDFS 中并读入 Spark 也不理想。考虑采用快速压缩的镶木地板。

标签: json scala apache-spark hadoop spark-dataframe


【解决方案1】:

您可以使用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 文件并读取解压缩文件以充分利用分布式处理架构。

【讨论】:

    【解决方案2】:

    似乎是为 spark 处理的数据格式存在问题。我必须预处理数据以将格式更改为火花友好格式,并在其上运行火花过程。这是我最终做的预处理:https://github.com/dipayan90/bigjsonprocessor/blob/master/src/main/java/com/kajjoy/bigjsonprocessor/Application.java

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2017-12-21
      • 2021-05-27
      • 2016-11-29
      • 1970-01-01
      • 2020-11-08
      • 2017-04-25
      相关资源
      最近更新 更多