RDD,弹性分布式数据集,是spark的底层数据结构。RDD是一个容错的,可以被并行操作的数据集合。RDD的特点之一是分布式存储,它的好处就是数据存储在不同的节点上,当需要数据进行计算的时候可以在这些节点上并行操作。弹性表现在节点在存储RDD数据的时候,既可以存储在内存中,也可以存储在磁盘上,也可以两者结合使用。RDD还有个特点就是延迟计算,当是transformation算子的时候,并不执行操作,直到遇到action算子的时候才开始执行计算。
根据RDD源码里面的注释,我们来了解一下RDD的五大特性
* Internally, each RDD is characterized by five main properties:
*
* - A list of partitions
* - A function for computing each split
* - A list of dependencies on other RDDs
* - Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
* - Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)
1 、A list of partitions
--RDD是由多个partition构成的。
2、A function for computing each split
--RDD的每个分区上都有一个函数去作用
3、 A list of dependencies on other RDDs
--RDD有依赖性,通常情况下一个RDD是来源于另一个RDD,这个叫做lineage。RDD会记录下这些依赖,方便容错。
4、Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
--可选项,如果RDD里面存的数据是key-value形式,则可以传递一个自定义的Partitioner进行重新分区,例如这里自定义的Partitioner是基于key进行分区,那则会将不同RDD里面的相同key的数据放到同一个partition里面。
5、Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)
最优的位置去计算,也就是数据的本地性。