Using Catalyst in Spark SQL

在SparkSQL中, 把一条SQL语句转化成对应的RDD任务, 完成这一过程(后续用"解析SQL到RDD"过程代替这一过程)全部在Catalyst框架实现.

 

"解析SQL到RDD"这一过程, 主要包含了4个组成部分, 如下图所示

  • analyzing a logical plan to resolve references(分析逻辑计划用于解析引用)

SparkSQL开始是一个待计算的关系, 要么是被SQL parser返回的abstract syntax tree(AST), 要么是使用API构造的DataFrame对象.

这两种情况下,待计算的关系都包含unresolved 属性引用或者关系. (简单说,就是缺失schema)

SparkSQL用Catalyst Rules和一个Catalog对象从元数据找到schema, 构建Logical Plan.

  • logical plan optimization(逻辑计划优化)

Logical Optimiztion阶段应用标准的RBO(rule-based optimization)去优化Logical Plan.

RBO包括constant folding、predicate pushdown(谓词下推)、projection pruning、null propagation、Boolean expression simplification等等规则.

  • physical planning(物理计划)

The Physical Planning阶段, 根据Optimized Logical Plan生成一个或多个物理计划. 用cost model选择一个计划. 这个阶段, CBO(cost-based optimization)仅仅用于选择join算法. 针对数据较小的表, Spark SQL使用broadcast join.

  •    code generation(代码生成)

在每台有数据的机器上生成Java二进制代码(移动数据不如移动代码).

代码的具体实现, 请跳转到下面的链接.

SparkSQL 如何把sqlText转化成RDD可以执行的tasks 系列

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值