因此,我正在实现一个mapreduce作业,这意味着我正在处理键值对。
我有变量
Iterable<FreqDataWritable> values
freqdatawritable是一个包含信息片段的对象,但现在我只关心它所包含的一个信息片段,即getfilename()访问的字符串。
我有以下循环:
ArrayList<String> filenames = new ArrayList<String>();
for(FreqDataWritable i : values) {
filenames.add(i.getFilename());
}
现在我只想打印数组列表文件名中的值。
for(int i = 0; i < filenames.size(); i++) {
System.out.println(filenames.get(i));
}
但是,当我这样做时,文件名中的所有内容都是相同的。唯一打印出来的是一个文件名,打印了多次。
我的原始代码比这个复杂,但我简化了它以获得帮助。有人知道怎么修吗?
谢谢
3条答案
按热度按时间2hh7jdfx1#
让我知道这是否有用?
ig9co6j12#
我想出来了。hadoop有一个奇怪的内存使用情况,所以当我第一次迭代这些值时,它只是一次又一次地将相同的对象添加到arraylist中。
相反,我需要这样做:
8fsztsew3#
你试过基于迭代器的方法吗?