带有迭代器错误的减速器

reducer with iterator error

我在 hadoop 中有一个减速器,代码如下:

public void reduce(Text key, Iterator<Text> values, Context context) throws IOException, InterruptedException {
/*some code*/
String followers = ""; 
  while(values.hasNext()){
        followers = followers + values.next().toString() + ",";
  }
/*some code*/
}

我想为某个节点制作一个关注者列表,但是当我 运行 它时,我得到了这个:

Error: java.lang.ArrayIndexOutOfBoundsException: 1

如果值是 Iterable 类型那么我没有问题,但为什么会这样?

提前致谢。

如果您要扩展 org.apache.hadoop.mapreduce.Reducer (Java Docs),您用于 reduce() 的方法签名不正确。当您实现 reduce() 方法时,您将覆盖 Reduce class.

中的实现

您有:

reduce(Text key, Iterator<Text> values, Context context)

应该是:

reduce(Text key, Iterable<Text> values, Context context)

注意 IteratorIterable 之间的区别。这可能意味着您的 reduce 实际上没有被调用。

您可以将 @Override 注释添加到该方法以帮助防止这种情况。