我正在测试一个简单的 mapreduce 应用程序,但我有点难以理解当我迭代 reduce 调用的输入值时会发生什么。
这是一段行为奇怪的代码..
public void reduce(Text key, Iterable<E> values, Context context)
throws IOException, InterruptedException{
Iterator<E> iterator = values.iterator();
E first = (E)statesIter.next();
while(statesIter.hasNext()){
E state = statesIter.next();
System.out.println(first.toString());
// some other stuff
}
// some other stuff
}
所以没什么奇怪的......除了每个 println 调用实际上打印一个不同的字符串这一事实。因此,每次我调用该next()
方法时,所引用的对象都会first
发生变化。
那么为什么会出现这种奇怪的行为呢?