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)

rdd具有5个特性:

1. 分区列表
rdd是被分区的,每个分区都会被一个task处理,分区数决定并行计算数量,rdd的并行度默认从父rdd传给子rdd; 默认情况下,hdfs上的块文件数就是spark处理时的分区数量,当然也可以在创建RDD时,人为指定RDD的分区数量,同时RDD的分区数最好设置为集群core数量的2-3倍;

2. 计算函数
spark的RDD的计算函数是以分片为基本单位的,每个RDD都会实现compute函数,对每个分区内的数据进行计算;其中,RDD的算子有宽窄依赖算子的分类,决定是否划分stage, 同时也有transformation和action算子的分类,决定是否触发job; 

3. 血缘关系
由于RDD每次转换都会生成新的RDD,所以RDD会形成类似流水线的前后依赖关系;

4. 分区器
分区只发生在shuffle阶段, 分区器控制分区规则和下游的分区数;当前Spark中实现了两种类型的分片函数,一个是基于哈希的HashPartitioner,另外一个是基于范围的RangePartitioner; 并且只有对于key-value的RDD,才会有Partitioner,非key-value的RDD的Parititioner的值是None; 

5. 分区数据的位置列表
此列表存储了每个Partition的优先位置,对于HDFS文件来说,就是每个分区数据的位置; 有了数据位置信息后,就可以实现数据不动代码动的特点,使得计算发生在本地;

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容