- 实现自定义分区比较简单了,继承Partitioner,实现getPartition()方法就行了,分区是按照key进行的。以wordcount为例。
- 输入文本1 hello world hello
3.输入文本2 hello world world
4 编写程序,hello 和world各自为一个分区,各自对应一个reduce,对应一个输出文件。
public class MyPatitioner extends Partitioner<Text, LongWritable>{
@Override
public int getPartition(Text key, LongWritable value, int numPartitions) {
// TODO Auto-generated method stub
if (key.toString().equals("hello")) {
return 0; //从0开始
}else {
return 1;
}
}
}
5.运行程序中加入以下两行代码
job.setPartitionerClass(MyPatitioner.class); //设置分区类
job.setNumReduceTasks(2); //设置分区个数
6.运行结果
hello 3
world 3