0
点赞
收藏
分享

微信扫一扫

Spark源码解析(一):RDD集合数据—分区数据的分配

eelq 2022-02-16 阅读 85

RDD是什么:分布式弹性数据集
待解决的问题:rdd和数据源分区数据如何进行分配???

例如(1,2,3,4),分区数numSlices=3,RDD中如何进行数据分区存储?

查看源码能够让我们快速理解。

 

 

进到makeRDD函数,看到内部是执行了parallelize函数,并且传入集合和分区数。

parallelize函数内部创造了一个ParallelCollectionRDD对象。


随后,进入ParallelCollectionRDD类内部。
有个同名方法:
将集合切片为numSlices子集合。我们在这里做的另一件事情是处理范围特别是集合,将切片编码为其他范围以最小化内存成本。这使得在表示大量数据集的RDD上运行Spark是非常有效的。如果收集是一个包含范围,我们对最后一个切片使用包含范围。

 

在slice函数和position函数之后,需要进行模式匹配。
case 1:范围Range,如果范围是包含,则对最后一个切片使用“包含范围”
case 2:用于长、双精度、大整数等范围
case 3:其他->进行position函数


position函数输入(集合的长度,分区数),并且对于[0,numSlices)进行迭代(until左闭右开)
根据规则计算start和end,最后会获得分区规则。
//例如(1,2,3,4,5) numslices=3 -> 对0,1,2迭代
//产生三个分区规则(0,1](1,3](3,5]
然后利用slice进行array切分。
即为(1)(2,3)(4,5)

 

举报

相关推荐

0 条评论