spark源码分析之Partitioner

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/flyinthesky111/article/details/79388392

一、源码下载以及安装阅读
这部分可以看我写的第一个源码分析的开始,有说明,比较简单,附上链接http://blog.csdn.net/flyinthesky111/article/details/79379309
二、源码分析
打开org.apache.spark.Partitioner.scala文件
整体结构上看,Partitioner有两个子类,分别是HashPartitioner和RangePartitioner
老规矩,看一下作者的注释,搞清楚Partitioner的主要作用
An object that defines how the elements in a key-value pair RDD are partitioned by key.
Maps each key to a partition ID, from 0 to numPartitions - 1.
即Partitioner是如何对K-V键值对的RDD进行以K分区的规则对象
然后不啦不啦又是一大堆的注释,那些话主要意思就是告诉我们,如果所有的RDD已经有了一个分区器,就会选择 这一个,我们没有在spark程序中自己定义分区规则,系统就会采用默认的HashPartitioner分区器。
嗯,下面源码,第一个defaultPartitioner,看名字就知道,这是系统默认的分区器,这个分区器内部最终还是调用的HashPartitioner的分区规则,只不过他会先行判断。
这里写图片描述
HashPartitioner分区器
这里写图片描述
先获取到分区数量,进行判断后,就会调用工具类中的nonNegativeMod方法传入(key.hashCode, numPartitions)按照规则进行分区,有兴趣的可以点进去看一下分区具体实现,在生产环境中我们经常会根据不同情况重写分区规则
RangePartitioner
这个比较复杂,单拉一篇出来看一下

猜你喜欢

转载自blog.csdn.net/flyinthesky111/article/details/79388392