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

时间:2014-07-17 23:17:41

标签: hadoop mapreduce

我试图在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 type?。只是好奇。谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

简短回答:VALUES中的类型可以是实现Writable接口的任何类型。例如,IntWritable,LongWritable,Text等。这些都在org.apache.hadoop.io包中。你可以创建自己的。

这个定义告诉你,你将使用2个参数调用reduce()方法的实现:一个键(一个参数化类型)和一个值集合(也是一个参数化类型)。集合实现对您来说是隐藏的;你不在乎它如何收集。但是调用允许您通过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()并获取集合中的值数。那是因为你正在处理一个潜在的庞大的价值观集合,其长度是不确定的。这是大数据,宝贝!