我在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条答案
按热度按时间jjjwad0x1#
如果你要延长
org.apache.hadoop.mapreduce.Reducer
(java文档)您用于reduce()
不正确。当你实施reduce()
方法,则重写reduce类中的实现。您有:
reduce(Text key, Iterator<Text> values, Context context)
应该是:reduce(Text key, Iterable<Text> values, Context context)
请注意Iterator
以及Iterable
. 这可能意味着您的reduce实际上没有被调用。您可以添加
@Override
方法的注解来帮助防止这种情况。