Java Mapreduce按组合键和排序分组
我有一个mapreduce作业,它执行一些处理并生成city:fruit的复合键(实现WritableComparable)和相关计数。现在,我想将它与第二个mapreduce作业联系起来,该作业确定每种水果类型计数最高的城市 mapreduce作业1的组合键输出示例:Java Mapreduce按组合键和排序分组,java,hadoop,mapreduce,hadoop2,composite-key,Java,Hadoop,Mapreduce,Hadoop2,Composite Key,我有一个mapreduce作业,它执行一些处理并生成city:fruit的复合键(实现WritableComparable)和相关计数。现在,我想将它与第二个mapreduce作业联系起来,该作业确定每种水果类型计数最高的城市 mapreduce作业1的组合键输出示例: +---------------------+-------+ | city:fruit composite| count | +---------------------+-------+ | london:apples
+---------------------+-------+
| city:fruit composite| count |
+---------------------+-------+
| london:apples | 3 |
+---------------------+-------+
| london:bannanas | 2 |
+---------------------+-------+
| london:oranges | 15 |
+---------------------+-------+
| charleston:apples | 20 |
+---------------------+-------+
| charleston:bannanas | 1 |
+---------------------+-------+
| charleston:oranges | 3 |
+---------------------+-------+
| chicago:bannanas | 17 |
+---------------------+-------+
| chicago:apples | 5 |
+---------------------+-------+
| chicago:oranges | 11 |
+---------------------+-------+
作业2的期望输出:
+------------+----------+
| city | fruit |
+------------+----------+
| london | oranges |
+------------+----------+
| charleston | apples |
+------------+----------+
| chicago | bannanas |
+------------+----------+
我怎样才能做到这一点?在我看来,复合键应该是两列,一列表示城市,一列表示水果。我会按水果分组,分类,然后抓住计数最高的那一排。我不知道这是如何转化为mapreduce世界的。任何建议都将不胜感激 过程
请注意,每个减速器都会写入一个单独的文件。之后,您可以使用HDFS功能轻松地合并它们。也有可能只有一个减速器,但是我不喜欢这种方式,因为它不可伸缩。这完全正确,谢谢!有没有一种方法可以在fuit:count组合发送到reducer之前对其进行排序?是的,但这需要编写更多的内容。请问一个新问题,如果你在这里提供链接,我会尝试回答。但是给你一个提示,SecondaryOrdering是你想要搜索的关键字。这不会在映射阶段进行排序,但在reduce阶段之前,我对二次排序/排序进行了一些研究,但似乎找不到关注复合值的材料。我发布了一个新问题: