掏出样本后,就到了肯定界线的时刻了。
留意每个key都邑有一个权重,这个权重是 【分区的数据总数/样本数】
- RangePartitioner.determineBounds(candidates, partitions)
起首排序val ordered = candidates.sortBy(_._1),然后肯定一个权重的步长
- val sumWeights = ordered.map(_._2.toDouble).sum
- val step = sumWeights / partitions
基于该步长,肯定界线,最后就形成了几个范围数据。
然后分区器形成二叉树,遍历该数肯定每个key对应的分区id
- partition = binarySearch(rangeBounds, k)
实践 —— 自定义分区器
自定义分区器,也是很简单的,只须要实现对应的两个办法就行:
- public class MyPartioner extends Partitioner {
- @Override
- public int numPartitions() {
- return 1000;
- }
- @Override
- public int getPartition(Object key) {
- String k = (String) key;
推荐阅读
跟着数字化企业尽力寻求最佳安然解决筹划来保护其赓续扩大的收集,很多企颐魅正在寻求供给互操作性功能的下一代对象。软件定义收集(SDN)具有很多的优势,经由过程将多个设备的┞菲握平面整>>>详细阅读
本文标题:Spark源码分析之分区器的作用
地址:http://www.17bianji.com/lsqh/34919.html
1/2 1