reducer与迭代器错误

时间:2016-07-01 21:30:23

标签: java hadoop iterator iterable

我在hadoop中有一个带有此代码的reducer:

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类型,那么我没有问题,但为什么会发生这种情况?

提前感谢。

1 个答案:

答案 0 :(得分:0)

如果您要延长org.apache.hadoop.mapreduce.ReducerJava Docs),则您用于reduce()的方法签名不正确。实现reduce()方法时,您将覆盖Reduce类中的实现。

你有:

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

应该是:

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

请注意IteratorIterable之间的区别。这可能意味着你的减少实际上并没有被调用。

您可以在方法中添加@Override注释,以帮助防止这种情况。