0
我的映射类将输出键值对,如:合并STR值在Hadoop中减速
abc 1
abc 2
abc 1
我要合并的值,并计算出同一对减速机类的使用HashMap
发生,输出像:
abc 1:2 2:1
但我的输出结果是:
abc 1:2:1 2:1:1
感觉就像还有额外的字符串与输出连接,但我不知道为什么。
这里是我的代码:
Text combiner = new Text();
StringBuilder strBuilder = new StringBuilder();
@Override
public void reduce(Text key, Iterable<Text> values,
Context context
) throws IOException, InterruptedException {
HashMap<Text, Integer> result = new HashMap<Text, Integer>();
for (Text val : values) {
if(result.containsKey(val)){
int newVal = result.get(val) + 1;
result.put(val, newVal);
}else{
result.put(val, 1);
}
}
for(Map.Entry<Text, Integer> entry: result.entrySet()){
strBuilder.append(entry.getKey().toString());
strBuilder.append(":");
strBuilder.append(entry.getValue());
strBuilder.append("\t");
}
combiner.set(strBuilder.toString());
context.write(key, combiner);
}