1

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

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

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

4

2 回答 2

6

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

但是,很有可能您的 reduce 任务输出的类型与传入的 map 对不同 - 例如,如果 map 任务计算文档中的单词,但 reduce 任务计算的是平均词频。在这种情况下,map 会发出整数,而 reduce 会发出浮点数。

于 2009-12-07T11:36:34.883 回答
1

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

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

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

于 2012-03-19T11:05:05.740 回答