# Spark Sql

RDD:弹性分布式数据集,一种分布式的内存抽象,表示一个只读的数据分区集合.

窄依赖:RDD之间分区式一一对应的;剩下的都是宽依赖.

RDD算子分为两类:transformation转换算子和action行动算子

只有遇到action操作,RDD才会真正开始计算(被称为惰性计算)

DataFrame 和 Dataset&#x20;

DataFrame对比RDD多了一个Schema信息

Dataset对比DataFrame多了强类型和弱类型的API,强类型Case Class指定

SparkSession作为入口

Spark SQL 执行两个大的阶段:逻辑计划(LogicalPlan)和物理计划(PhysicalPlan)

逻辑计划: 生成逻辑算子树

unresolved LogicalPlan(sql->逻辑算子树)  -> Analyzed LogicalPlan -> Optimized LogicalPlan

unresolved LogicalPlan:仅仅数据结构，不包含数据信息

Analyzed LogicalPlan:节点中绑定各种信息

Optimized LogicalPlan: 应用各种优化规则对一些低效的逻辑计划进行转换

物理计划:对逻辑计划生成的算子树进一步转化，生成物理算子树

iterator\[PhysicalPlan] -> SparkPlan -> Prepared SparkPlan

同样的逻辑算子树可以生成多个物理算子树，选取最优进行计算

SparkSession类sql方法调用SessionState中的各种对象,包括上述不同阶段对应的SparkSqlParser类、Analyzer类、Optimizer类和SparkPlanner类等,最后封装成一个QueryExecution对象

Catalyst

&#x20;InternalRow体系、TreeNode体系和Expression体系

&#x20;InternalRow体系:数据的表示:RDD\[InternalRow]
