javamapreduce组合键和排序组

8nuwlpux  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(280)

我有一个mapreduce作业,它执行一些处理并生成一个city:fruit with 关联的计数。现在我想用第二个mapreduce任务来链接它,该任务确定每个水果类型计数最高的城市。
mapreduce作业1的复合键输出示例:

+---------------------+-------+
| 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世界的。任何建议都将不胜感激!

rseugnpd

rseugnpd1#

过程
将数据读入新的map reduce作业
将您的信息分为城市键和复合值fruit:count
在减少阶段,你手头上有一个城市的所有价值。现在可以在循环中迭代所有这些值。把它们分开,记住最大的水果数和水果数。
现在将数据写入数据库或hdfs
请注意,对于每个reducer,都会编写一个单独的文件。您可以轻松地将它们与hdfs功能合并。也有可能只有一个减速机,但我不喜欢这种方式,因为它是不可扩展的。

相关问题