Spark的那些事中前后文章关联比较紧密,没有阅读第一篇的可以关注公众号查找Spark的那些事RDD篇。
上一篇已经介绍完RDD结构。虽然RDD结构是spark设计思想最重要的组成,但是没有辅助的功能只有结构并不能独立使用。真正使RDD完成计算优化的,就是今天我们要讲到的spark RDD的另一个重要组成部分RDD算子。
-
RDD算子的定义
-
RDD算子在spark中的实现
-
RDD算子的分类
-
RDD算子的使用
RDD算子的定义
用来生成或处理RDD的方法叫做RDD算子。RDD算子就是一些方法,用来构建RDD及数据之间的关系。算子可以把数据转换成RDD,也可以由RDD产生新RDD,或者将RDD持久化到磁盘或内存。
从技术角度讲RDD算子可能比较枯燥,我们举个生活学习中的例子来类比RDD算子的作用。
完成计算需要什么呢?
需要数据载体和运算方式。数据载体可以是数字,数组,集合,分区,矩阵等。一个普通的计算器,它的运算单位是数字,而运算符号是加减乘除,这样就可以得到结果并输出了。一个矩阵通过加减乘除也可以得到结果,但是结果跟计算器的加减乘除一样吗?非也!
矩阵相乘的运算法则:
AB的行数 = A的行数;AB的列数 = B的列数。
A与B的先后次序不能改变。
假设A是m行,B是n列。
AB的结果是一个m*n 大小的矩阵。
所以说加减乘除在不同的计算框架作用是不同的,而加减乘除这样的符号就是运算方式。在spark计算框架有自己的运算单位(RDD)和自己的运算符(RDD算子)。
可以理解为:RDD(或数据)算子 RDD 算子 = RDD(或数据)
是不是很抽象?下面来点具体的。
RDD算子在spark中的实现
Action算子的作用很单一,主要是整合数据,比如collect()返回RDD所有元素,count()返回RDD中元素的个数,当然其主要的作用是执行了runjob方法提交了作业。
下面我们主要分析一下Transformation RDD算子的源码结构: