理解 Spark SQL 优化策略的最好方法就是自己实现一个

栏目: 编程工具 · 发布时间: 6年前

内容简介:我们的例子非常简单,先注册一个表,包含一个 a 字段:

spark sql 的优化框架 Catalyst 博大精深,里面的精华是很多大牛一个pr一个pr积累起来的,仔细琢磨琢 磨相关源码也是一件痛并快 乐的事情,spark 逻辑优化 就是在一个 AST 树上进行匹配,匹配到一定的规则,然后进行等价变换规则,从而使计算的成本更低,今天我带大家自己实现一个逻辑优化规则,帮助大家更快地理解spark sql 逻辑优化的底层原理, 如果对 spark sql 总体架构不了解的,可以先看这篇文章  是时候学习真正的spark技术了  了解全貌。

我们的例子非常简单,先注册一个表,包含一个 a 字段:

理解 Spark SQL 优化策略的最好方法就是自己实现一个

我们看下当前的执行计划:

理解 Spark SQL 优化策略的最好方法就是自己实现一个

可以看到这个执行计划是比较费的, 因为对于   (a * 1) 这个算式来讲,其实就等于a本身,我们针对这种规则自定义一个 逻辑优化规则

理解 Spark SQL 优化策略的最好方法就是自己实现一个

理解 Spark SQL 优化策略的最好方法就是自己实现一个

上面的代码很好理解,如果匹 配到一个变量乘以1的表达式,就直接变换为变量本身, 应用完这个规则 (a#27 * 1) 就变为了 a#27:

理解 Spark SQL 优化策略的最好方法就是自己实现一个

这样就少了一次乘法运算,从而提高了性能。

上面我们是从内部测试,如果你在应用中要定义一个基于规则的优化,然后让这个优化策略自动应用到你写的 sql 中,可以如下方式定义

理解 Spark SQL 优化策略的最好方法就是自己实现一个

sparkSession 中给用户留了扩展点,Spark catalyst的扩展点在SPARK-18127中被引入,Spark用户可以在SQL处理的各个阶段扩展自定义实现,非常强大高效

  • injectOptimizerRule – 添加optimizer自定义规则,optimizer负责逻辑执行计划的优化,我们例子中就是扩展了逻辑优化规则。

  • injectParser – 添加parser自定义规则,parser负责SQL解析。

  • injectPlannerStrategy – 添加planner strategy自定义规则,planner负责物理执行计划的生成。

  • injectResolutionRule – 添加Analyzer自定义规则到Resolution阶段,analyzer负责逻辑执行计划生成。

  • injectPostHocResolutionRule – 添加Analyzer自定义规则到Post Resolution阶段。

  • injectCheckRule – 添加Analyzer自定义Check规则。

其他几种扩展我们可以也会举例说明,今天只讲解一下怎么扩展逻辑优化规则。

大家都在看

关注 【spark技术分享】

一起撸spark源码,一起玩spark最佳实践

理解 Spark SQL 优化策略的最好方法就是自己实现一个


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Machine Learning in Action

Machine Learning in Action

Peter Harrington / Manning Publications / 2012-4-19 / GBP 29.99

It's been said that data is the new "dirt"—the raw material from which and on which you build the structures of the modern world. And like dirt, data can seem like a limitless, undifferentiated mass. ......一起来看看 《Machine Learning in Action》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码