分区器作用:决定该数据在哪个分区
概览:
计算公式:x=key.hashcode%分区数,如果为正 x即该数据所在分区,如果为负 x+总分区数 即为当前key所在分区
触发情况:
reducebykey,groupbykey,join等算子会自动调用
通过Partitionby设置
原理:通过水塘抽样法确定key值分区后分区临界点,再划分
水塘抽样算法原理:https://www.cnblogs.com/strugglion/p/6424874.html
注意:采样中需要collect,所以会触发action
触发情况:sortbykey
基础Partitioner,设定分区数和分区方法
class MyPartitioner(n: Int) extends Partitioner{ override def numPartitions: Int = n override def getPartition(key: Any): Int = { val k = key.toString.toInt k / 100 } }
原文:https://www.cnblogs.com/fanhuazhixia/p/15176187.html