在MapReduce程序的Reduce方法中使用iterable的集合对象的类型是什么



我试图理解MapReduce程序中Reducer的reduce方法中Iterable的用法。方法的签名是

protected void reduce(KEYIN key,
                      Iterable<VALUEIN> values,
                      org.apache.hadoop.mapreduce.Reducer.Context context)
               throws IOException,
                      InterruptedException

我的问题是关于Iterable值。值是否为List类型、Set类型?只是好奇。谢谢你的帮助。

简短的回答:VALUES中的类型可以是实现Writable接口的任何类型。例如,不可写的,长可写的,文本等。它们位于org.apache.hadoop.io包中。你也可以创造你自己的。

这个定义告诉你,你的reduce()方法的实现将被2个参数调用:一个键(参数化类型)和一个值集合(也是参数化类型)。集合的实现是隐藏的;你不关心它是如何收集的。但是该调用允许您通过Iterable接口访问该集合,这简单地意味着您可以使用for (VALUEIN val: values)循环一次一个地遍历这些值。

例如,假设您实现了一个接收LongWritable键和Text值的reducer。你的reduce方法看起来像这样:

public void reduce(LongWritable key, Iterable<Text> values){...
...
for (Text word: values) {
   ...do something with word...
}

您将注意到values参数没有为您提供size()方法,因此您不能通过values.size()来获取集合中值的数量。这是因为您正在处理一个长度不确定的值的潜在庞大集合。这是大数据,宝贝!

相关内容

  • 没有找到相关文章

最新更新