Spark Sql
RDD:弹性分布式数据集,一种分布式的内存抽象,表示一个只读的数据分区集合.
窄依赖:RDD之间分区式一一对应的;剩下的都是宽依赖.
RDD算子分为两类:transformation转换算子和action行动算子
只有遇到action操作,RDD才会真正开始计算(被称为惰性计算)
DataFrame 和 Dataset
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
InternalRow体系、TreeNode体系和Expression体系
InternalRow体系:数据的表示:RDD[InternalRow]
Last updated
Was this helpful?