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

Hadoop MapReduce程序的Reduce方法中使用iterable的集合对象的类型是什么,hadoop,mapreduce,Hadoop,Mapreduce,我试图理解Iterable在MapReduce程序的reduce方法中的用法。方法的签名是 protected void reduce(KEYIN key, Iterable<VALUEIN> values, org.apache.hadoop.mapreduce.Reducer.Context context) throws IOException,

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

protected void reduce(KEYIN key,
                      Iterable<VALUEIN> values,
                      org.apache.hadoop.mapreduce.Reducer.Context context)
               throws IOException,
                      InterruptedException
protectedvoid reduce(键入键、,
可比值,
org.apache.hadoop.mapreduce.Reducer.Context)
抛出一个异常,
中断异常

我的问题是关于Iterable值。这些值是列表类型还是集合类型?。只是好奇。谢谢你的帮助

简短回答:值中的类型可以是实现可写接口的任何类型。例如,IntWritable、LongWritable、Text等,它们位于org.apache.hadoop.io包中。你可以自己创造

这个定义告诉您,reduce()方法的实现将用两个参数调用:一个键(参数化类型)和一个值集合(也是参数化类型)。集合实现对您隐藏;你不在乎它是怎么收集的。但是该调用使您可以通过Iterable接口访问该集合,这很简单,意味着您可以使用
for(VALUEIN val:values)
循环一次迭代一个值

例如,假设您实现了一个采用长可写键和文本值的reducer。您的reduce方法如下所示:

public void reduce(LongWritable key, Iterable<Text> values){...
...
for (Text word: values) {
   ...do something with word...
}
public void reduce(长可写键,可写值){。。。
...
for(文本字:值){
…用word做点什么。。。
}

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

它是磁盘上数据的自定义迭代器-为什么不查看源代码?