首先介绍一下RDD.
RDD是spark中最基础的逻辑抽象,代码中是一个抽象类。它代表不可变,可分区,里面的元素可并行计算的集合。
不可变代表RDD作为计算逻辑的一部分,绝对不允许被修改。
可分区代表,RDD作为承载数据流的类型,必须要在大数据时代实现并行处理的前提条件---分区。
里面的元素可并行计算代表的是分区数据可以发给不同的executor,这样可以实现并行处理。
RDD作为一个抽象类,有一些属性。
a list of partions 就是分区的意思。
a function for computing each split 就是为了确定将数据分给那个分区。
a list of dependencies on other RDD,依赖关系,这里面可以参考java io流,RDD和它比较相似。为了读取一个文件,需要进行多种inputstream的包装。
a partitioner for key-value RDDs. 就是一系列的分区。
a list of prefered location to compute each split 对于每个分区中的数据最好放到哪个计算单元上,一般是最近原则。因为这样数据传输速度效率高呀!
接下来是算子的概念,其实算子就是函数。操作RDD的函数。有些是将RDD转换为其他的rdd的转换算子,一些是进行处理操作的行动算子。
RDD有三种创建方式。从集合中创建,从外部存储创建,从其他RDD转化。
RDD的创建
原文:https://www.cnblogs.com/blog-lmk/p/13220758.html