MapReduce自定义分区partition的作用和用法

默认分区数量为

    key.hash%reducetask的个数

自定义分区

    自己定义的

自定义分区很简单,我们只需要继承抽象类Partitioner,重写getPartition方法即可,另外还要给任务设置分区:

job.setPartitionerClass(),    job.setNumReduceTasks();

就可以了。 

注意: 

自定义分区的数量需要和reduce task的数量保持一致。

但是为1也或者大于reducetask也可以,为1的时候所有的数据放到一起,大于的时候则按照分区编号来分

例子

import org.apache.hadoop.mapreduce.Partitioner;
public class JiduPartitioner extends Partitioner{
    @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;
    }
}

 

你可能感兴趣的:(大数据,Java类,MapReduce)