自定义分区程序: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');
}