无法访问迭代器的值

时间:2016-04-26 13:41:38

标签: java list mapreduce iterator

我正在使用map-reduce中的单词计数示例进行一些修改。我将reducer中迭代器的值复制到列表中,以检查数字是正数还是负数,以便分别对它们求和。问题是当它们存储在列表中时我无法获取值。我得到零作为总和的总数,如下所示:

Hello 0
World 0

reducer的代码:

     public static class Reduce extends MapReduceBase implements   Reducer<Text, IntWritable, Text, IntWritable> {
         public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
         int sum = 0;
         int listSize=0;
         boolean isPos=false;
         boolean isNeg=false;
         List<Integer> l=new ArrayList<Integer>();
         int size=Iterators.size(values);

         while (values.hasNext()) {
             l.add(values.next().get());
         }

         for(int i=0; i<l.size();i++) {
             if(l.get(i)==-1) {isNeg=true;}
             else if(isNeg!=true && l.get(i)!=-1) isPos=true;
         }

         if(isNeg==true) {
             for(int i=0; i<l.size();i++) {
                l.add(i, -1);
             }
         }
         for(int i=0; i<l.size();i++) {
            sum+=l.get(i);
         }
         if(isNeg) {sum=sum+1;}
         if(isPos) {sum=sum-1;}

         if(sum>0) {sum=sum-1;}
         else if (sum<0){sum=sum+1;}

         output.collect(key, new IntWritable(sum));}
    }

当我将代码返回到此时,我得到了数字的总和,但在将它们复制到列表时我无法访问这些值。

while (values.hasNext()) {
         sum+=values.next().get());
     }

0 个答案:

没有答案