如何解决对MapWritable产生荒谬结果进行迭代和求和
这是我的映射器的输出
让{test = 1,播放= 1,让= 2,我= 2,您= 1}
让{test = 2,let = 1,me = 2,you = 2}
测试{play = 1,let = 3,me = 2,you = 1}
test {test = 1,let = 2,me = 2,you = 2}
您{test = 1,玩1,让= 3,我= 2}
您{test = 2,let = 2,me = 2,you = 1}
public static class TokenizerMapper extends Mapper<Object,Text,MapWritable>
public static class IntSumReducer extends Reducer<Text,MapWritable,MapWritable> {
MapWritable incrementingMap = new MapWritable();
//reduce method
public void reduce(Text key,Iterable<MapWritable> values,Context context) throws IOException,InterruptedException
{
在操作Iterable值时,我感到非常困惑
我想接收具有相同键的所有值的总和。例如,就我而言
{test = 1,播放= 1,让= 2,我= 2,您= 1}
{test = 2,let = 1,me = 2,you = 2}
SUM = 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
让{test = 3,play = 1,let = 3,me = 4,you = 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));
result_final = 10
我很困惑:
1-增量映射的所有元素之和的输出应为14,结果为28。
2-当我执行结果/ 2(28/2)时,我得到10。
你能解释我在做什么错吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。