在编写MapReduce作业(特别是相关的Hadoop)时,必须定义一个map()
和一个reduce()
函数,两者都产生一系列键/值对.应用程序可以自由定义键和值的数据类型.
在单词计数的规范示例中,两个函数都产生类型对,(string, int)
其中键是单词,值是出现次数.这里 - 以及我见过的所有其他例子 - 输出的键和值类型在两个函数之间是一致的.
必须/应的键/值对的类型通过产生map()
和reduce()
是MapReduce的任何应用程序中相同的?如果是的话:为什么?
当然,显然,map的输出对的类型和reduce的输入对必须相同,因为一个被传递到另一个.
但是,很有可能你可能有一个reduce任务,它输出的颜色与输入的地图对不同 - 例如,如果map任务计算了文档中的单词,但reduce任务计算了平均单词频率.在那种情况下,映射将发射整数,但是reduce将发射浮点数.