代码之家  ›  专栏  ›  技术社区  ›  Jørn Schou-Rode dscher

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

  •  1
  • Jørn Schou-Rode dscher  · 技术社区  · 15 年前

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

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

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

    2 回复  |  直到 10 年前
        1
  •  6
  •   Amber    15 年前

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

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

        2
  •  1
  •   Ahmadov    13 年前

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

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

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