我在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类型,那么我没有问题,但为什么会发生这种情况?
提前感谢。
答案 0 :(得分:0)
如果您要延长org.apache.hadoop.mapreduce.Reducer
(Java Docs),则您用于reduce()
的方法签名不正确。实现reduce()
方法时,您将覆盖Reduce类中的实现。
你有:
reduce(Text key, Iterator<Text> values, Context context)
应该是:
reduce(Text key, Iterable<Text> values, Context context)
请注意Iterator
和Iterable
之间的区别。这可能意味着你的减少实际上并没有被调用。
您可以在方法中添加@Override
注释,以帮助防止这种情况。