前言
在学习Java基础的过程中,泛型绝对算得上是一个比较难理解的知识点,尤其对于初学者而言,而且就算是已经有基础的Java程序员,可能对泛型的理解也不是那么透彻,属于那种看了明白,时间长了就忘的那种,究其根本,还是对泛型不够理解。
大部分人对泛型的认识:“基础知识,但是比较模糊”
public class HashPartitioner<K2, V2> implements Partitioner<K2, V2> {
public void configure(JobConf job) {}
/** Use {@link Object#hashCode()} to partition. */
public int getPartition(K2 key, V2 value,
int numReduceTasks) {
// key的hash值与integer的最大值取与然后对ReduceTask的个数取余
return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
}
}
hash的好处是可以很key的分布更加随机,但是这样会将一些不同的key放在同一个分区中,这并不是我们所期望的。
[](()3.自定义Partitioner
面对HashPartitioner所具有的局限,我们可以通过自定义Partitioner来解决,如下:
[](()3.1 实现自定义分区器
import java.util.HashMap;
import java.util.Map;</