带有迭代器错误的减速器
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)
注意 Iterator
和 Iterable
之间的区别。这可能意味着您的 reduce 实际上没有被调用。
您可以将 @Override
注释添加到该方法以帮助防止这种情况。
我在 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)
注意 Iterator
和 Iterable
之间的区别。这可能意味着您的 reduce 实际上没有被调用。
您可以将 @Override
注释添加到该方法以帮助防止这种情况。