Hadoop map()和reduce()是否应返回相同类型的键/值对?

Hadoop map()和reduce()是否应返回相同类型的键/值对?,hadoop,mapreduce,Hadoop,Mapreduce,在编写MapReduce作业(特别是Hadoop,如果相关的话)时,必须定义一个map()和一个reduce()函数,这两个函数都会产生一系列键/值对。键和值的数据类型可由应用程序自由定义 在单词计数的典型示例中,这两个函数都产生类型为(string,int)的对,键为单词,值为出现次数。这里——以及我所看到的所有其他示例中——输出的键和值类型在这两个函数之间是一致的 在任何MapReduce应用程序中,map()和reduce()生成的键/值对的类型必须/应该相同吗?如果是:为什么?否。当然,

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

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


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

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


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

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


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

map和reduce输出可能不同。但是您需要告诉应用程序它们是。以下是如何:

setOutputKeyClass()和setOutuptValueClass()方法控制映射函数和reduce函数的输出类型,这两个函数通常是相同的


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

映射和减少输出可能不同。但是您需要告诉应用程序它们是。以下是如何:

setOutputKeyClass()和setOutuptValueClass()方法控制映射函数和reduce函数的输出类型,这两个函数通常是相同的

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