【发布时间】:2019-01-21 22:12:06
【问题描述】:
我将镶木地板文件按日期存储在以下目录中的分区中:
/activity
/date=20180802
我使用的是 Spark 2.2,有 400 多个分区。我的理解是谓词下推应该允许我运行如下查询并获得快速结果。
spark.read.parquet(".../activity")
.filter($"date" === "20180802" && $"id" === "58ff800af2")
.show()
但是,上面的查询大约需要 90 秒,而下面的查询大约需要 5 秒。 我做错了什么还是这是预期的行为?
spark.read.parquet(".../activity/date=20180802")
.filter($"id" === "58ff800af2")
.show()
【问题讨论】:
-
您是否尝试过连续多次运行查询?第一个要慢得多,因为 Spark 需要扫描所有分区。此外,可能值得调用 .explain() 来查看计划并验证过滤器是否确实按预期下推。
-
我最初误解了这个问题,太仓促了。我想知道谓词下推是否真的在这里有效。这不是 SPARK SQL,而是 spark.read 非 JDBC。
-
关于 SO 的一些有趣陈述的有趣问题。我认为丹尼斯有答案,因为您使用的不是 SQL 语句而是 spark.read。也就是说,人们会期待更智能的性能,但是......
-
stackoverflow.com/questions/37180073/… 请注意给出的示例和丹尼斯的回答,我认为这可以解释。
-
我想我们也在这里讨论分区修剪。
标签: apache-spark parquet