以字数统计的轻微变化为例来解释我想要做什么。
我有 3 个映射器,每个映射器在 3 个大型输入文件上生成完整的字数统计结果。假设输出为:
Mapper 1 Result:
-------
cat 100
dog 50
fox 10
Mapper 2 Result:
-------
fox 200
pig 5
rat 1
Mapper 3 Result:
-------
dog 70
rat 50
fox 10
请注意,每个结果都是具有唯一键的完整字数统计,对给定文件进行计数结果。
现在在化简器方面,我的算法要求只有一个化简器,出于有点太长的原因,这里无法讨论,我希望每个映射器的结果按计数降序输入化简器,但不执行任何随机和排序步骤。即我喜欢化简器按以下顺序接收来自每个映射器的结果,而无需按键进行任何分组:
cat 100
dog 50
fox 10
fox 200
pig 5
rat 1
dog 70
rat 50
fox 10
即只需按值(不是键)的降序将每个映射器的结果加载到化简器中
似乎这应该是一个仅限地图的工作,因为你不希望随机播放和排序发生。
如果你真的需要使用Reduce,那么我建议你需要有一个组合键并进行二次排序。
键将包括映射器 ID、普通键和计数值。您将对映射器 ID 进行主要排序,对计数进行辅助排序。您还需要一个不对任何内容进行分组的分组比较器(或仅根据映射器 ID 和普通键进行分组)。
同样,查看使用Reducer以防止随机和排序所需的所有操作,似乎这应该是一个仅限Map的工作,除非输出必须在单个文件中。