【发布时间】:2016-02-04 05:24:25
【问题描述】:
我在 AWS S3 上有一个 CSV 文件和一个 JSON 文件(每个都有 500 万行/记录)。它们包含完全相同的数据,只是格式不同。
在具有 10 个任务节点的 EMR 集群上,我启动了 Spark(10 个执行器,40 个执行器核心)并创建了两个 DataFrame:一个针对 CSV,一个针对 JSON。
针对基于 JSON 文件构建的 DF 的查询的运行速度比针对基于 CSV 构建的 DF 的类似查询快 2-3 倍。我没有找到任何有关不同存储文件格式的性能差异的信息。
有人知道为什么对 JSON 上的 DF 的查询比 CSV 上的 DF 运行得更快吗?
下面的数据框创建代码
根据 JSON 文件创建 DF:
val hc_json = new org.apache.spark.sql.hive.HiveContext(sc)
val path_json = "s3://<mybucket>/<myjsonfile>.json"
val df_json = hc_json.read.json(path_json)
df_json.registerTempTable("table_json")
hc_json.sql("Select count(*) from table_json").collect()
根据 CSV 文件创建 DF:
(我在使用以下参数启动 Spark 时导入 spark-csv 包:--packages com.databricks:spark-csv_2.11:1.2.0)
val hc_csv = new org.apache.spark.sql.hive.HiveContext(sc)
val path_csv = "s3://<mybucket>/<mycsvfile>.csv"
val df_csv = hc_csv.load("com.databricks.spark.csv", Map("path" -> path,"header"->"false"))
df_csv.registerTempTable("table_csv")
hc_csv.sql("Select count(*) from table_csv").collect()
【问题讨论】:
标签: amazon-web-services amazon-s3 apache-spark apache-spark-sql