我在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类型,那么我没有问题,但为什么会发生这种情况呢?
提前谢谢。
发布于 2016-07-02 09:13:36
如果要扩展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之间的区别。这可能意味着您的减少实际上没有被调用。
您可以将@Override注释添加到方法中,以帮助防止这种情况发生。
https://stackoverflow.com/questions/38154109
复制相似问题