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

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

内容简介:我们的例子非常简单,先注册一个表,包含一个 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 优化策略的最好方法就是自己实现一个


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

查看所有标签

猜你喜欢:

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

菜鸟侦探挑战数据分析

菜鸟侦探挑战数据分析

[日] 石田基广 / 支鹏浩 / 人民邮电出版社 / 2017-1 / 42

本书以小说的形式展开,讲述了主人公俵太从大学文科专业毕业后进入征信所,从零开始学习数据分析的故事。书中以主人公就职的征信所所在的商业街为舞台,选取贴近生活的案例,将平均值、t检验、卡方检验、相关、回归分析、文本挖掘以及时间序列分析等数据分析的基础知识融入到了生动有趣的侦探故事中,讲解由浅入深、寓教于乐,没有深奥的理论和晦涩的术语,同时提供了大量实际数据,使用免费自由软件RStudio引领读者进一步......一起来看看 《菜鸟侦探挑战数据分析》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试