您的位置:首页 > 其它

spark源码分析之Partitioner

2018-02-27 14:56 190 查看
一、源码下载以及安装阅读

这部分可以看我写的第一个源码分析的开始,有说明,比较简单,附上链接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

这个比较复杂,单拉一篇出来看一下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spark Partitioner