无法从我的reducer获取聚合值

agyaoht7  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(361)

我编写了map reduce程序来根据“key”查找最上面的单词。我用一个hashmap收集reducer输出,并做了一些比较以获得顶级单词,最后我用cleanup()方法打印输出。但是当我看到结果时,它没有显示键中的聚合值。
这是我的代码。
所以,请帮帮我,从过去几天开始,我一直在努力把事情做好。

public class top5reduce extends Reducer<IntWritable,Text,IntWritable,Text>
{
    Map<Integer,Text> map=new HashMap<Integer,Text>();
        public void reduce(Iterable<IntWritable> key,Text value,Context context) throws IOException, InterruptedException,NullPointerException
    {

        int sum1=0;

for(IntWritable key2:key)
        {
            sum1 +=key2.get();

        }   
map.put(sum1,value);

    } 
protected void cleanup(Context context)
{
    int key=0;
    Text val=null;
Map<Integer,Text> map1=new TreeMap<Integer,Text>(new Comparator<Integer>()
        {
    public int compare(Integer o1,Integer o2)
    {
        return o2.compareTo(o1);
    }
        });
        map1.putAll(map);
        Set<Map.Entry<Integer,Text>> set=map1.entrySet();
        for(Map.Entry<Integer,Text> entr:set)
        {
            key=entr.getKey();
            val=entr.getValue();
        }
        try {
            context.write(new IntWritable(key), val);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}
}
2vuwiymt

2vuwiymt1#

我认为你的reduce函数有问题。当您尝试为每个键进行聚合时,必须遍历所有值并添加它们。请尝试下面的代码,看看它是否有效。

public void reduce(IntWritable key,Iterable<IntWritable> value,Context context) throws IOException, InterruptedException,NullPointerException
        {

            int sum1=0;

    for(IntWritable key2:value)
            {
                sum1 +=key2.get();

            }   
    map.put(key,sum1);

        }

相关问题