我有一个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世界的。任何建议都将不胜感激!
1条答案
按热度按时间rseugnpd1#
过程
将数据读入新的map reduce作业
将您的信息分为城市键和复合值fruit:count
在减少阶段,你手头上有一个城市的所有价值。现在可以在循环中迭代所有这些值。把它们分开,记住最大的水果数和水果数。
现在将数据写入数据库或hdfs
请注意,对于每个reducer,都会编写一个单独的文件。您可以轻松地将它们与hdfs功能合并。也有可能只有一个减速机,但我不喜欢这种方式,因为它是不可扩展的。