RDD本身就是一个Berkeley的博士们在写论文时,抽象出的概念,其本质与HadoopMapReduce处理时输入输出的key-value,Flink的dataset没有本质区别。处理时,任然使用iterator一边载入部分数据,一边执行运算(每个partition的实现内部实际就是一个iterator)。
偶个人认为,如果要通俗的解释RDD,第一步可以简单的把它想象成一个数组/列表,大家可以用迭代器类的东东遍历它,可以分片,可以打散;第二步,可以找一些例子,看些接口文档,毕竟直接以列表来理解还是优点偏差的;再之后,当用例子了解了功能后,可以更进一步的阅读下它的原理。rdd的算子主要分成2类,action和transformation。也就是变换以及一些操作。
关于rdd的特征,摘录下知乎上答友的一部分:
rdd的五个特征:
dependencies:建立RDD的依赖关系,主要rdd之间是宽窄依赖的关系,具有窄依赖关系的rdd可以在同一个stage中进行计算。
partition:一个rdd会有若干个分区,分区的大小决定了对这个rdd计算的粒度,每个rdd的分区的计算都在一个单独的任务中进行。
preferedlocations:按照“移动数据不如移动计算”原则,在spark进行任务调度的时候,优先将任务分配到数据块存储的位置。
compute:spark中的计算都是以分区为基本单位的,compute函数只是对迭代器进行复合,并不保存单次计算的结果。
partitioner:只存在于(K,V)类型的rdd中,非(K,V)类型的partitioner的值就是None。