将迭代存储到arraylist中导致重复和缺失值

时间:2017-02-11 09:01:04

标签: java hadoop arraylist iterable

我正在尝试编写一个hadoop java代码来查找几个文件与某些关键字的相关性。当前步骤我能够输出到=。在reducer中,我需要先计算包含这个单词的文件数,然后计算一定的指标值iv。我的输出是<key, value>=<word@filename, iv>。我使用Iterable<Text>作为值,并且因为不允许循环遍历此迭代两次,所以我通过可迭代值进行了第一次循环,以在将值存储到ArrayList时计算文件数。我使用arraylist来输出第二个循环。但是,输出有很多重复,并且缺少许多值。将值存储到ArrayList中时,代码有什么问题吗?

public void reduce(Text key, Iterable<Text> values, Context context)
            throws IOException, InterruptedException {

  // sum up the number of files containing a particular word
  int file_count = 0;
  ArrayList<Text> value_storage = new ArrayList<Text>();                        

  for (Text val : values) {
    file_count++;
    context.write(key, val);
  }

  for (int i=0; i<value_storage.size(); i++) {
    context.write(key, value_storage.get(i));
  }
}

enter image description here

0 个答案:

没有答案