java - 可迭代到 ArrayList 元素更改

标签 java hadoop arraylist mapreduce iterable

所以我正在实现 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));
}

但是,当我这样做时,文件名中的所有内容都是相同的。唯一打印出来的是多次打印的单个文件名。

我的原始代码比这更复杂,但为了帮助我简化了它。有人知道怎么修这个东西吗?

谢谢

最佳答案

我想通了。 Hadoop 有一个奇怪的内存使用,所以当我第一次迭代这些值时,它只是一遍又一遍地将相同的对象添加到数组列表中。

相反,我需要这样做:

for(FreqDataWritable i : values) {
    filenames.add(new String(i.getFilename()));
}

关于java - 可迭代到 ArrayList 元素更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23329173/

相关文章:

java - 如何在 jDialog 中放置最大化和最小化按钮?

java - 我在霍夫曼编码 java 中遇到一些逻辑错误

hadoop - 在 hadoop 多集群环境上运行 nutch 时出错

hadoop - 如何检查 Hbase 区域服务器是否已启动或已关闭

java - 数组索引越界

java - ArrayList 仅从分隔 rune 件复制最后一个值

java - 是否有任何选项可以通过循环自动创建几个 ArrayList?

java - GWT 按钮 长按鼠标

java - J2ME 是否支持 HTTP PUT?

bash - 在特定作业上运行 SHell 脚本时如何从 HDFS 获取最新的有效分区日期?