在reducer中我想在数组中使用Hadoop中的Iterable,所以我这样做了:
protected void reduce(Text arg0, Iterable<Text> arg1, Reducer<Text, Text, Text, Text>.Context context)
throws IOException, InterruptedException {
...
...
Text[] res = Iterables.toArray(arg1, Text.class);
然后我在这个数组上循环:
for( int i=0;i<res.length;++i){...
之后,数组中的每个元素都等于最后一个元素。在我看来,Hadoop传递给reducer的Iterable总是包含每个Next更新的相同元素。因此,调用res.length会消耗迭代器,并且返回的数组中的所有元素都相等。 这是期望/预期的行为吗?它是否违反了迭代器的实现方式?