今天写MapReduce的分区进行排序的功能,自己写了一个Partitioner,然后用的时候就错了
public static class MyPartition extends Partitioner<IntWritable, IntWritable> { @Override public int getPartition(IntWritable key, IntWritable value, int numTaskReduce) { int maxNumber = 550; int end = maxNumber/numTaskReduce + 1; int keyNum = key.get(); for(int i=0; i<numTaskReduce; i++) { if(keyNum >= end*i && keyNum <= end*(i+1)) { return i; } } return -1; } }
后来发现应该是返回了-1,导致了出错的,分区默认是从0开始的,返回-1肯定就报错了。