Spark之没什么卵用笔记2 SQL解析前基础(后续完善)

开始前废话

因为以前只接触过RDD编程,对DataFrame与Dataset不怎么了解。仅知道Spark Sql是基于DataFrame与Dataset实现的。
之前在看Structured Streaming的时候,在Spark官方文档上看到,MLlib以前是基于RDD实现的,后续会逐渐替换成基于DataFrame实现,留下了DataFrame与Dataset性能要优于RDD的印象。
但是在看第三章的时候,SQL转换成物理算子后,会直接生成RDD,也就是sql 最终是基于RDD进行计算的?

Spark SQL转换成RDD的过程简述

Spark SQL首先解析成逻辑计划算子树 ,然后逻辑计划算子树转换成 物理计划算子树 ,然后遍历物理算子节点触发RDD运算。因为SQL转换成RDD的过程在Driver端进行,因此可通过断点的方式阅读源码。

了解转换细节前重要的概念

即使书中说了也还是想象不出三个玩意的在实际代码中的巧妙。下面是强扭的瓜,先撸过再说。。。
InternalRow及其子类:及其子类是用来表示转换成RDD后RDD中每行数据的数据类型也就是 RDD[InternalRow]
TreeNode及其子类:逻辑算子树以及物理算子树的节点类型
Expression及其子类:加减乘除??

数据类型

关系型数据库建表的时候通常要告诉数据库表有哪些列,每列的数据类型是什么。每个数据库都有自己的定义类型,建表的时候,列的类型只能从数据库定义的类型中选择。Spark SQL中也有定义好的数据类型。具体哪些类型可以看官方文档。 还有一个要点是所有的数据类型都是继承AbstractDataType实现的(后续思考题AbstractDataType的抽象思路

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。