SparkSQL是基于RDD的,但是其执行效率又比RDD高,其原因就是因为SparkSQL的优化器–Catalyst
RDD执行效率低是因为RDD无法进行优化,其本身不具备数据scheme约束信息,无法得知数据的具体信息,然而SparkSQL一般用于结构化和半结构化数据,所以具备数据的scheme信息,可以对其进行优化处理
一:SparkSQL的API
SparkSQL的API有三种
sql
Dataset
DateFrame
二:SparkSQL的执行流程
三:SparkSQL的优化过程
1.API层接收sql语句
2.Catalyst层优化
2.1.解析SQL生成AST抽象语法树
2.2往AST中加入元数据
元数据解析:
例如: people.id#3#L
解析: 生成 id 的标识为 3 数据类型是Long类型
2.3谓词下推
谓词下推的作用 : 把filter操作提前,减少了后续一序列操作的数据集,自然提高了数据的操作效率
2.4列值裁剪
比如说只需要获取 id 列
就把id列先获取出来
把不需要的列数据提前裁剪掉
减少不必要的列数据
另外:
AST只是逻辑计划,后续还需要生成物理计划,执行RDD