Hadoop实践小贴士
1. 在reducer中,每一输入是一个<key,values>对,例如Text key, Iterable<Text> values. 其中的values只能遍历一遍,这在程序设计时要特别注意。
for(Text value : values) { doSth(); } for(Text value : values) { doSthElse(); }
上面的代码中,doSth可以执行,doSthElse是不能执行的。Iterable接口只实现了三种方法:hasNext, next以及remove. 因此,当第一个for循环结束之后,values.iterator()已经到了最后一个元素。因此第二个循环为空,不执行doSthElse.