默认分区数量为
key.hash%reducetask的个数
自定义分区
自己定义的
自定义分区很简单,我们只需要继承抽象类Partitioner,重写getPartition方法即可,另外还要给任务设置分区:
job.setPartitionerClass(), job.setNumReduceTasks();
就可以了。
注意:
自定义分区的数量需要和reduce task的数量保持一致。
但是为1也或者大于reducetask也可以,为1的时候所有的数据放到一起,大于的时候则按照分区编号来分
例子
import org.apache.hadoop.mapreduce.Partitioner;
public class JiduPartitioner<K, V> extends Partitioner<K, V>{
@Override
//自定义partition的数量需要和reduce task数量保持一致
public int getPartition(K key, V value, int numPartitions) {
String dname=key.toString();
switch(dname)
{
case "研发部门":return 0;
case "测试部门":return 1;
case "硬件部门":return 2;
case "销售部门":return 3;
}
return 4;
}
}