自定义分区程序:N个不同文件的N个键,用于单词计数

时间:2013-10-30 06:18:33

标签: hadoop

您好我正在学习hadoop,我想要一个关于如何使用自定义分区来解决字数问题的例子。我希望将reducers设置为26,以便所有以“A”开头的字符将转到第一个reducer,所有字符“B”转到第二个reducer等等......

public class 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;

1 个答案:

答案 0 :(得分:1)

因此,如果你正在进行单词计数,那么Text key应该是一个单词(希望以a-z开头,因为你似乎并不关心数字)而不是整行。

其次,如果您知道此Partitioner只会在有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');
}