1、究竟什么是RDD呢?
有人可能会回答是:Resilient Distributed Dataset。没错,的确是如此。但是我们问这个实际上是想知道RDD到底是个什么东西?以及它到底能干嘛?好的,有了问题,那么我们带着问题往下看,总会有答案的。
2、hadoop的计算模型&spark的计算模型
(1)首先我们可以看一下hadoop的计算模型:在这幅图中,每一次job的运行都需要对数据进行磁盘的读写操作。
(2)再来看一下spark的计算模型:它的每一次job可以暂时将数据缓存到内存中,从而避免了每一次都进行磁盘的读写操作。并且只有在必要的时候进行一个磁盘的读写。这样一来,就提升了计算速度。
3、RDD的由来和创建方式
好了,说了这么多,貌似是跟RDD没有多大的关系,其实不然。我们来看,为了实现上面spark的内存计算模型,采用的方式就是RDD。当然你实在是想问RDD到底是什么,我觉得你可以把它看作是一个抽象类,或者是一个类型(如Int,Double等)。
那么我们如何创建RDD呢?
我们有三种方式可以创建RDD。分别是:
(1)通过已存在的Scala的集合来创建
(2)通过读取HDFS、Hbase的文件来创建
(3)通过其他的RDD来创建
4、RDD的特征
其实,具体说到RDD到底是什么鬼东西,我们也可以从它具备的特征上来理解一下。RDD所具备的特征有:
(1)A Lsit of partitions
意思就是说,每一个RDD包含多个partition,并且这个partition的个数可以由用户来制定
(2)A function for computing each split
对应的每一个分片上都会应用一个函数来进行计算。
(3)A list of dependencies on other RDDs
每一个RDD可能依赖一个或多个父的RDD
(4)A partitioner for key-value RDDs
针对键值对的RDD,用户可以自定义partitioner
(5)A list of preferred location to compute each split on
针对每一个分片,都会选择一个最优的位置来进行计算,这就是所谓的数据不动,代码动。
5、RDD的操作
RDD主要包含两大类的操作:transformations and actions。其中各自主要的基本操作如下图所示:
6、RDD的transformations操作的lazy特性
所谓lazy特性就是来执行,就是在需要的时候,再去执行。这也是RDD一大特性。