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一大特性。