这是Map器的输出
让{测试=1,游戏=1,让=2,我=2,你=1}
让{测试=2,让=1,我=2,你=2}
测试{玩=1,让=3,我=2,你=1}
测试{test=1,let=2,me=2,you=2}
你{测试=1,玩=1,让=3,我=2}
你{测试=2,让=2,我=2,你=1}
public static class TokenizerMapper extends Mapper<Object, Text, Text, MapWritable>
public static class IntSumReducer extends Reducer<Text, MapWritable,Text, MapWritable> {
MapWritable incrementingMap = new MapWritable();
//reduce method
public void reduce(Text key, Iterable<MapWritable> values, Context context) throws IOException, InterruptedException
{
我在操作我的iterable值时感到非常困惑
我要接收具有相同键的所有值的总和。例如,在我的情况下
{测试=1,游戏=1,让=2,我=2,你=1}
{测试=2,让=1,我=2,你=2}
总和=14。
我使用下面的方法来获得键中元素的累积和
private void addall(MapWritable mapWritable)
{
Set<Writable> keys = mapWritable.keySet();
for(Writable key: keys)
{
IntWritable val = (IntWritable)mapWritable.get(key);
if(incrementingMap.containsKey(key))
{
IntWritable count = (IntWritable)incrementingMap.get(key);
count.set(count.get()+val.get());
}
else
{
incrementingMap.put(key, val);
}
}
}
它的输出为:incrementingmap
让{测试=3,游戏=1,让=3,我=4,你=3}
现在我迭代这些元素来求和
Set<Writable> keys = incrementingMap.keySet();
for(Writable mykey : keys)
{
IntWritable val = (IntWritable)incrementingMap.get(mykey);
result = result + val.get();
}
但对于键“let”,返回28。
如果我在做
result = result/2;
incrementingMap.put(new Text("result_final"), new IntWritable(result));
最终结果=10
我很困惑:
1-递增Map的所有元素之和的输出应该是14,结果是28。
当我做结果/2(28/2)时,它给我10。
你能解释一下我做错了什么吗?
暂无答案!
目前还没有任何答案,快来回答吧!