我正在尝试编写一个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));
}
}