这是从S3中读取Json文件的最快方法:Spark

时间:2016-07-06 00:00:08

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

我有一个包含文件夹的目录,每个文件夹都包含压缩的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
  5. 压缩文件有多个json对象/文件。这个过程需要花费大量时间才能阅读(只需要上面两个语句)。有没有更快的方法来做到这一点?架构也很复杂。我打算写一些查询来分析数据集。但我担心从s3读取数据所需的时间。

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

1 个答案:

答案 0 :(得分:6)

如果您的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的类型为{ {1}})可能更好。