本帖最后由 pig2 于 2014-5-1 01:20 编辑
问题导读:
1.我们所定义的map函数与reduce函数是用来干什么的?
2.key和value分别代表什么意思?
很多在写mapreduce,但是有的写的不太明白,并不太了解我们为什么这么写。
首先说map函数中的key和value
Key:
都说是偏移量,这里换另外一种说法,我们是否知道字符串的长度,使得也就是说我们首先计算一个字符串的长度,然后按照字符串来进行不断的分割。
value:
value这个值,是我们真正使用的,我们也就是对其进行分割。
我们知道了上面,而且有很多的解说,但是这里面很多人还是很迷惑。为什么那?下面整体来讲讲:
加入一个文件的内容:
上面是一个文件的内容。
那么我们来看了。
上面那一个是map中的输入值,会有几个map。正常情况下:会有三个map值。
这里又会产生问题了,那么这三行数据,是谁划分的,是由谁来做的,由FileInputFormat来帮我们做的工作
好了,继续:
那么value是什麽?
1,2,3,4这就是所传递的value值。
我们所作的工作是什麽?
进一步的划分数据,也就是进一步的分割这个字符串。分割之后,我们传递给reduce。
我们所书写的reduce完成了什么工作。
其实我们完成一个输出的工作:
有多少个分区就有多少个reduce。也就是说,我们所做的只不过是一个计数的工作。
怎么计数的那?对谁计数?
比如
分区1:两个1
分区2:两个2
分区3:一个b
........
这里的分区可以理解一个容器:容器里装着什么,被分组的数据。我们所定义的reduce做了什么工作:数数,数这里面装个几个数据。
那么数数怎么实现,就是通过下面进行数数的。
- for (IntWritable val : values) {
- sum += val.get();
- System.out.println("val.get():" + val.get());
- }
复制代码
本文链接:http://www.aboutyun.com/thread-7555-1-1.html
|