18
2021
02

自定义Partitioner

(1)自定义类继承Partitioner,重写getPartition()方法

    public class ProvincePartitioner extends Partitioner<Text, FlowBean> {


    @Override

    public int getPartition(Text key, FlowBean value, int numPartitions) {


// 1 获取电话号码的前三位

        String preNum = key.toString().substring(0, 3);

        

        int partition = 4;

        

        // 2 判断是哪个省

        if ("136".equals(preNum)) {

            partition = 0;

        }else if ("137".equals(preNum)) {

            partition = 1;

        }else if ("138".equals(preNum)) {

            partition = 2;

        }else if ("139".equals(preNum)) {

            partition = 3;

        }

        return partition;

    }

}

(2)在job驱动中,设置自定义partitioner: 

job.setPartitionerClass(CustomPartitioner.class);

(3)自定义partition后,要根据自定义partitioner的逻辑设置相应数量的reduce task

job.setNumReduceTasks(5);

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。