在reducer中的for循环中出现编译错误“只能迭代数组或java.lang.Iterable的实例”
获取编译错误只能在reducer中for循环的java.lang.Iterable的数组或实例上迭代在reducer中的for循环中出现编译错误“只能迭代数组或java.lang.Iterable的实例”,java,arrays,hadoop,mapreduce,iterator,Java,Arrays,Hadoop,Mapreduce,Iterator,获取编译错误只能在reducer中for循环的java.lang.Iterable的数组或实例上迭代 public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> Output, Reporter arg3) throws IOException { // TODO Auto-gene
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();
在上面的代码中,对于IntWritable val:values,getting编译错误只能在java.lang.Iterable at的数组或实例上迭代。如何在同一个方法中使用循环?将Iterable而不是迭代器传递给该方法,或者使用hasNext和next在迭代器的元素上进行迭代:
将Iterable而不是迭代器传递给方法,或者使用hasNext和next对迭代器的元素进行迭代:
迭代器通常指向集合中的单个实例。 因此,对于IntWritable val:值无效
改用Iterable。在函数中传递Iterable 迭代器通常指向集合中的单个实例。 因此,对于IntWritable val:值无效 改用Iterable。在函数中传递Iterable 试试这个
for (IntWritable val : (Iterable<IntWritable>)() -> values) {
sum += val.get();
....
Iterable->values相当于
new Iterable<IntWritable>() {
@Override
public Iterator<IntWritable> iterator() {
return values;
}
};
试试这个
for (IntWritable val : (Iterable<IntWritable>)() -> values) {
sum += val.get();
....
Iterable->values相当于
new Iterable<IntWritable>() {
@Override
public Iterator<IntWritable> iterator() {
return values;
}
};