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

标签 json scala apache-spark amazon-s3 pyspark

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

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

例如:

testData/May/01/00/File.json.gz

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

我有:

  1. 大师:1 c3.4xlarge
  2. 核心:19 c3.4xlarge
  3. Spark 1.5.2
  4. 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/

相关文章:

Python 日志覆盖 dictConfig 级别

javascript - 如何从存储在 localstorage 中的 json 字符串在 HTML 页面中显示 json 数据

c# - 在 ASP.NET 和 C# 中的服务器端使用 JSON

scala - 将架构从一个数据框复制到另一数据框

scala - Apache Spark reduceByKey 对小数求和

java - 使用 Spark 验证 CSV 文件列

javascript - 改造 + GSON = 输入 "onFailure"

session - Netty https ( TLS ) session 持续时间 : why is renegotiation needed?

scala - 字符串隐式转换列表,例如 +=

java - 使用org.apache.spark.launcher.SparkLauncher时如何查看正在提交的spark-launcher命令?