我有一个包含文件夹的目录,每个文件夹都包含压缩的 JSON 文件( .gz
)。目前我正在做:
val df = sqlContext.jsonFile("s3://testData/*/*/*")
df.show()
例如:
testData/May/01/00/File.json.gz
每个压缩文件大约为 11 到 17 GB。
我有:
压缩文件有多个 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]
)可能更可取。