HashPartitioner<Text,Text> hash=new HashPartitioner<Text,Text>();
@Override
public int getPartition(CompositeKeyClass keyClass, Text valClass, int numOfPartition) {
// TODO Auto-generated method stub
try {
String[] type=valClass.toString().split(",");
if(type[0].equals("Mapper1")) {
return (hash.getPartition(keyClass.getFirst(), valClass, numOfPartition))%numOfPartition;
} else {
return (hash.getPartition(keyClass.getFirst(), valClass, numOfPartition))%numOfPartition;
}
}
}
我在分区程序类中使用上述代码来获取自定义类的密钥。一切正常,但我希望将文本"Mapper1"的值发送到第一个化简器,另一个发送到第二个化简器。我怎样才能做到这一点?我已将job.numOfReduceTaks
设置为 2。请帮忙!
这是一个静态的决定,对吧?试试这个:
if (type[0].equals("Mapper1")) {
return 0;
} else {
return 1;
}
是的,在驱动程序中,您需要将job.numOfReduceTaks
设置为 2。你做对了。