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

5 json scala amazon-s3 apache-spark pyspark

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

val df = sqlContext.jsonFile("s3://testData/*/*/*")
df.show()
Run Code Online (Sandbox Code Playgroud)

例如:

testData/May/01/00/File.json.gz
Run Code Online (Sandbox Code Playgroud)

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

我有:

  1. 大师:1 c3.4xlarge
  2. 核心:19 c3.4xlarge
  3. Spark 1.5.2
  4. EMR-4.2.0

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

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

Spl*_*lee 7

如果您的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)
Run Code Online (Sandbox Code Playgroud)

此时(我正在使用Spark 1.6.2)似乎jsonFile已被弃用,因此切换到sqlContext.read.schema(mySchema).json(myJsonRDD)(myJsonRDD类型的地方RDD[String])可能更好.

  • 对于那些使用较新版本的Spark`sqlContext.jsonFile("...")`的人不推荐使用.请改用`sqlContext.read.json("...")`. (3认同)