我有一个包含文件夹的目录,每个文件夹都包含压缩的 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]
)可能更可取。
关于json - 这是从 S3 : Spark 读取 Json 文件的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38214633/