【发布时间】:2011-08-31 23:02:53
【问题描述】:
我收到一个迭代器作为参数,我想对值进行两次迭代。
public void reduce(Pair<String,String> key, Iterator<IntWritable> values,
Context context)
有可能吗?如何 ? 签名是由我正在使用的框架(即 Hadoop)强加的。
-- 编辑--
最后,reduce 方法的真正签名是iterable。我被这个 wiki page 误导了(这实际上是我发现的唯一一个未弃用(但错误)的 wordcount 示例)。
【问题讨论】:
-
我想我可以先将每个值存储在一个容器中并在其上迭代两次,但是......说真的......我希望有更好的东西
-
出于好奇,需要迭代两次吗?
-
无论你做什么,只是不要在迭代器上迭代两次
-
@Matt Ball:在很多情况下,您可能想要对一个集合进行两次迭代。以“多数选举”问题为例,当您必须知道集合 C 中是否存在超过 size(C)/2 次的元素 E 时。您需要首先使用cs.utexas.edu/~moore/best-ideas/mjrty/index.html 对元素进行完整迭代,仅当此类元素存在时才会给出正确答案,然后在实际检查“猜测的主要元素”是否真的是主要元素时进行第二次遍历.
-
@log0:你解决了答案吗?当我迭代第二个循环时。我的 cahe 列表被覆盖了。