spark优化规则顺序

问题描述 投票:0回答:1

我们知道spark有很多优化规则,这些优化规则有具体的排序要求吗?决定这些顺序的原则是什么?

更具体地说,例如,我知道ColumnPruning需要添加一个项目来选择尽可能少的靠近数据源的列。 PushDownPredicate 需要将谓词推送到尽可能靠近数据源的位置。

这两种执行计划,哪一种更合适呢? 案例1:LocalRelation附近的项目

Filter (key#0 < 10)
+- Filter (rand(0) > 0.5)
   +- Project [key#0]
      +- LocalRelation <empty>, [key#0, value#0]

案例2:LocalRelation附近的过滤器

Project [key#0]
+- Filter (key#0 < 10)
   +- Filter (rand(0) > 0.5)
      +- LocalRelation <empty>, [key#0, value#0]

在spark单元测试中,case2是预期的结果

apache-spark apache-spark-sql
1个回答
0
投票

每个版本中使用的顺序和规则都会发生变化(例如 OSS 和 Databricks 之间的顺序和规则不同)。

实际代码是查找此信息的最佳位置(3.5 分支):Optimizer.scala defaultBatchesbatchesnonExcludableRules

批量功能显示各个阶段的路径。

计划最终的效果取决于实施情况,例如不要依赖 OSS Spark 与供应商的实现中的低行为。

此外,文件或内存中的基础数据类型也会影响所使用的计划。

© www.soinside.com 2019 - 2024. All rights reserved.