该部分总结自《Spark权威指南》第四章内容,个人学习笔记和记录。
结构化API
在前面的章节中已经有介绍结构化API,spark中的结构化集合主要有DataFrame和DataSet两种。他们的抽象逻辑就像excel表格一样,由行和列组成列表数据。
模式
模式(Schemas)定义DataFrame的列名和类型。相当于模式定义了一张“表”是什么样的,一条记录有几列,每列是什么数据类型。
列
列(Column)表示简单类型、复杂类型或空值,由spark根据列信息,以便于对列进行转换。
行
行(Row)表示数据记录,DataFrame的每个数据记录都必须是Row类型的。
数据类型
Spark有大量数据类型表示,比如ByteType、ShortType、LongType等,不同的数据类型占用内存大小不一样,可表示的数据范围和数据精度也不一样。
结构化API执行流程
spark代码执行流程步骤如下:
1. 编写DataFrame、SQL、DataSets代码
2. Spark进行代码检查并转化为逻辑计划
3. Spark将逻辑计划转化为物理计划并进行优化
4. Spark在集群中执行物理计划
逻辑计划
获取用户代码并将其转化为逻辑结构,仅代表抽象转化(这里什么叫抽象转化),不涉及executor和driver。
物理计划
通过生成不同的物理执行策略并通过成本模型进行比较来指定逻辑计划在集群上的执行方式,会导致一系列的RDD和转化。
执行
Spark在RDD上运行代码,运行过程中生成优化的Java字节码,得到运行结果并返回给用户。
最后
本章先绍了结构化API的一些基本要素,比如列、行、模式、spark内部类型等概念。接着介绍结构化API的执行流程。Spark执行流程经历用户代码–逻辑计划–物理计划–集群执行物理计划的过程,使得用户代码最终在集群机器中执行。但是在执行流程这部分看完依旧没有很清楚整个内部执行的流程,这部分仍旧需要配合其他资料继续了解。另外,这部分的执行流程是划分在结构化API章节下介绍的,那么这个执行流程是仅针对结构化API适用,还是对于其他类型的API,比如RDD,都适用?