默认的Partition无法满足我们的需求,因此需要自定义partition过程。
根据map输出的不同key值,通过partition把map输出的数据输出到numReduceTasks个不同的reduce上去。
public static class Selector extends Partitioner<Text, Text>{
@Override
public int getPartition(Text key, Text value, int numReduceTasks) {
return Integer.parseInt(key.toString()) % numReduceTasks;
}
}
设置job的partition:
job.setPartitionerClass(Selector.class);