一、前言
阅读本节需要先掌握【SPARKSQL3.0-Analyzer阶段源码剖析】
Optimizer阶段是对Analyzer分析阶段的逻辑计划【logicalPlan】做进一步的优化,将应用各种优化规则对一些低效的逻辑计划进行转换
例如将原本用户不合理的sql进行优化,如谓词下推,列裁剪,子查询共用等。
本质:【optimizer阶段是对 Analyzer生成的LogicalPlan进行优化调整生成新的LogicalPlan】
这个阶段的优化器同样是基于大量的规则(Rule),而大部分的规则都是基于直观或经验而得出的规则,随着spark社区的活跃,此优化器阶段的规则也逐渐完善丰满,可以说每一个优化规则都有其诞生的原因,不可不查。
二、示例
由于上一节的示例在优化器中没有明显sql的优化,我们这次举一个谓词下推的优化过程,其他优化规则可根据源码自行推导
此处示例使用的是dataFrameAPI,其原理和spark.sq