Iterable.toarray()的奇怪Hadoop M / R行为

时间:2017-01-11 11:17:38

标签: java hadoop mapreduce hadoop2

在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会消耗迭代器,并且返回的数组中的所有元素都相等。 这是期望/预期的行为吗?它是否违反了迭代器的实现方式?

0 个答案:

没有答案