【问题标题】:Which is the fastest way to read Json Files from S3 : Spark这是从 S3 读取 Json 文件的最快方法:Spark
【发布时间】:2016-11-07 22:50:36
【问题描述】:

我有一个包含文件夹的目录,每个文件夹都包含压缩的 JSON 文件 (.gz)。目前我正在这样做:

val df = sqlContext.jsonFile("s3://testData/*/*/*")
df.show()

例如:

testData/May/01/00/File.json.gz

每个压缩文件大约 11 到 17 GB。

我有:

  1. 大师:1 c3.4xlarge
  2. 核心:19 c3.4xlarge
  3. Spark 1.5.2
  4. emr-4.2.0

压缩文件有多个 json 对象/文件。这个过程需要大量的时间来阅读(只是上面的两个语句)。有没有更快的方法来做到这一点?架构也有点复杂。我打算写一些查询来分析数据集。但我担心从 s3 读取数据所需的时间。

最大负载可以是 10TB。我打算稍后使用缓存来处理查询。

【问题讨论】:

标签: json scala apache-spark amazon-s3 pyspark


【解决方案1】:

如果您的 JSON 是统一结构的,我建议您为 Spark 提供 JSON 文件的架构,这样可以大大加快处理速度。

当您不提供架构时,Spark 将首先读取文件中的所有行以推断架构,正如您所观察到的,这可能需要一段时间。

请参阅此文档了解如何创建架构:http://spark.apache.org/docs/latest/sql-programming-guide.html#programmatically-specifying-the-schema

然后您只需将您创建的架构添加到 jsonFile 调用:

val df = sqlContext.jsonFile("s3://testData/*/*/*", mySchema)

此时(我使用的是 Spark 1.6.2)似乎jsonFile 已被弃用,因此切换到sqlContext.read.schema(mySchema).json(myJsonRDD)(其中myJsonRDD 的类型为RDD[String])可能更可取。

【讨论】:

  • 我创建了一个模式,看看使用它是否会加快读取文件的过程,我的查询从 44 秒执行到 47 米执行。当时集群上的负载可能存在一些令人困惑的变量,但我认为它花费的时间更长,这很有趣。我正在运行 Spark 1.5.1 版。
  • 不推荐使用较新版本的 Spark sqlContext.jsonFile("...")。请改用sqlContext.read.json("...")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 2015-02-09
  • 1970-01-01
  • 2012-08-26
相关资源
最近更新 更多