代码之家  ›  专栏  ›  技术社区  ›  user23358051

火花顺序优化规则

  •  0
  • user23358051  · 技术社区  · 2 年前

    我们知道spark有很多优化规则,这些优化规则是否有特定的排序要求?决定这些订单的原则是什么?

    更具体地说,例如,我知道ColumnPrunning需要添加一个项目,以选择尽可能靠近数据源的较少列。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]
    

    在火花单元测试中,情况2是预期结果

    0 回复  |  直到 2 年前
        1
  •  0
  •   Chris    2 年前

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

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

    批处理函数显示通过各个阶段的路径。

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

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