我有一个包含文件夹的目录,每个文件夹都包含压缩的JSON文件(.gz
)。目前我在做:
val df = sqlContext.jsonFile("s3://testData/*/*/*")
df.show()
例如:
testData/May/01/00/File.json.gz
每个压缩文件大约为11到17 GB。
我有:
压缩文件有多个json对象/文件。这个过程需要花费大量时间才能阅读(只需要上面两个语句)。有没有更快的方法来做到这一点?架构也很复杂。我打算写一些查询来分析数据集。但我担心从s3读取数据所需的时间。
最大负载可以是10TB。我打算稍后使用缓存来处理查询。
答案 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}})可能更好。