自定义分区程序:N个键数到N个不同文件的字数

问题描述:

嗨,我正在学习hadoop,我想要一个关于如何使用自定义分区程序来计算字数问题的示例。我想将减速器设置为26,以便所有字符以“A”开头,第一个减速器和第二个减速器的所有字符“B”,等等......自定义分区程序:N个键数到N个不同文件的字数

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

所以,如果你正在做字数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'); 
}