在reducer中的for循环中获取编译错误"只能迭代数组或java.lang.Iterable的实例"。
public void reduce(Text key, Iterator<IntWritable> values,
OutputCollector<Text, IntWritable> Output, Reporter arg3)
throws IOException {
// TODO Auto-generated method stub
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
在上面的代码中,在 "for (IntWritable val : values)"
处收到编译错误"只能迭代数组或 java.lang.Iterable 的实例"。如何在同一个中使用循环?
要么将Iterable<IntWritable>
而不是Iterator<IntWritable>
传递给方法,要么使用 hasNext()
和 next()
遍历Iterator
的元素:
while (values.hasNext()) {
IntWritable val = values.next();
...
}
试试这个。
for (IntWritable val : (Iterable<IntWritable>)() -> values) {
sum += val.get();
....
(Iterable<IntWritable>)() -> values
相当于
new Iterable<IntWritable>() {
@Override
public Iterator<IntWritable> iterator() {
return values;
}
};