如何在自定义键的情况下为自定义分区程序设置 numReduceTask


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。你做对了。

相关内容

  • 没有找到相关文章