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

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

例如:
testData/May/01/00/File.json.gz

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

我有:
  • 大师:1 c3.4xlarge
  • 核心:19 c3.4xlarge
  • Spark 1.5.2
  • emr-4.2.0

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

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

    最佳答案

    如果您的 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] )可能更可取。

    10-06 08:46
    查看更多