Java Mapreduce group by compositekey 并排序
Java Mapreduce group by compositekey and sort
我有一个 mapreduce 作业,该作业执行一些处理并生成 city:fruit 的复合键(实现 WritableComparable)和相关计数。现在,我想将它与辅助 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 |
+------------+----------+
我怎样才能做到这一点?在我 SQL 的想法中,组合键将是两列,一列用于城市,一列用于水果。我会按水果分组,排序,然后抓取计数最高的那一行。我无法弄清楚这如何转化为 mapreduce 世界。如有任何建议,我们将不胜感激!
进程
- 将您的数据读入新的 map reduce 作业
- 将您的信息拆分为城市作为键和复合值 fruit:count
- 在 reduce 阶段,您拥有手头城市的所有价值。现在您可以在一个循环中迭代所有这些值。将它们分开并记住最大的水果数量和水果。
- 现在将数据写入数据库或 HDFS
请注意,对于每个减速器,都会写入一个单独的文件。之后您可以轻松地将它们与 HDFS 功能合并。也有可能只有一个减速器,但我不喜欢这种方式,因为它不可扩展。
我有一个 mapreduce 作业,该作业执行一些处理并生成 city:fruit 的复合键(实现 WritableComparable)和相关计数。现在,我想将它与辅助 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 |
+------------+----------+
我怎样才能做到这一点?在我 SQL 的想法中,组合键将是两列,一列用于城市,一列用于水果。我会按水果分组,排序,然后抓取计数最高的那一行。我无法弄清楚这如何转化为 mapreduce 世界。如有任何建议,我们将不胜感激!
进程
- 将您的数据读入新的 map reduce 作业
- 将您的信息拆分为城市作为键和复合值 fruit:count
- 在 reduce 阶段,您拥有手头城市的所有价值。现在您可以在一个循环中迭代所有这些值。将它们分开并记住最大的水果数量和水果。
- 现在将数据写入数据库或 HDFS
请注意,对于每个减速器,都会写入一个单独的文件。之后您可以轻松地将它们与 HDFS 功能合并。也有可能只有一个减速器,但我不喜欢这种方式,因为它不可扩展。