map()和reduce()应该返回相同类型的键/值对吗?

时间:2009-12-07 11:25:26

标签: hadoop mapreduce

编写MapReduce作业(特别是相关的Hadoop)时,必须定义map()reduce()函数,两者都产生一系列键/值对。应用程序可以自由定义键和值的数据类型。

在单词计数的规范示例中,两个函数都会产生类型为(string, int)的对,其中键为单词,值为出现次数。这里 - 以及我见过的所有其他例子 - 输出的键和值类型在两个函数之间是一致的。

map()reduce()产生的键/值对的类型必须/应该在MapReduce的任何应用程序中是否相同?如果是的话:为什么?

2 个答案:

答案 0 :(得分:6)

没有。当然,显然,map的输出对的类型和reduce的输入对必须相同,因为一个被传递到另一个。

但是,很有可能你可能有一个reduce任务,它输出的颜色与输入的地图对不同 - 例如,如果map任务计算了文档中的单词,但reduce任务计算了一个平均单词频率。在这种情况下,映射将发出整数,但reduce将发出浮点数。

答案 1 :(得分:1)

Map和Reduce输出可以不同。但是你需要告诉应用程序它们是什么。方法如下:

setOutputKeyClass()和setOutuptValueClass()方法控制map和reduce函数的输出类型,这些函数通常是相同的。

如果它们不同,您可以分别通过setMapOutputKeyClass()和SetMapOutputValue设置地图输出键/值类型。