1

嗨,我正在学习 hadoop,我想要一个关于如何使用自定义分区器解决字数问题的示例。我希望将减速器设置为 26,以便所有以“A”开头的字符将转到第一个减速器,所有字符“B”到第二个减速器,依此类推....

公共类 PersonPartitioner 扩展 Partitioner{

@Override
public int getPartition(Text key, IntWritable Val, int numOfReducer) {
    String line = key.toString();
    String [] splits = line.trim().replaceAll("[0-9]", "").split("\\W+");
    for(String str:splits){

        if(null==str||str.trim().length()<1||""==str){
        }else{String ch = str.substring(0, 1);
            character.set(ch);
        }
    }




    return Math.abs(character.charAt(0).hashCode()*127)%numOfReducer;
4

1 回答 1

1

因此,如果您要进行字数统计,则Text key应该是一个单词(希望以 az 开头,因为您似乎不关心数字)而不是整行。

其次,如果您知道这Partitioner只会在有 26 个的情况下使用,Reducers您可以简单地执行此操作。

@Override
public int getPartition(Text key, IntWritable Val, int numOfReducer) {
   String word = key.toString();
   char char = word.toLowerCase().charAt(0);
   return Charcter.getNumericValue(char) - Character.getNumericValue('a');
}
于 2013-10-30T10:51:57.200 回答