sorting - Hadoop - 按键正确排序并按 reducer 分组

标签 sorting hadoop mapreduce mapper

我有一些数据来自 reducer,它们是这样的:

9,2    3
5,7    2
2,3    0
1,5    3
6,3    0
4,2    2
7,1    1

我想根据第二列的数字对它们进行排序。像这样:

2,3    0
6,3    0
7,1    1
5,7    2
4,2    2
1,5    3
9,2    3

当我在本地运行我的程序时,我使用:

sort -k2,2n

但我不知道如何在 Hadoop 上做同样的事情。我尝试了几个不起作用的选项,例如:

-D mapreduce.partition.keycomparator.options=-k2,2n

而且,我希望所有具有相同 key 的数据都可以在同一个 reducer 上运行。 所以在这种情况下:

2,3   0

6,3   0

应该由同一个 reducer 处理。

关于我应该放在 hadoop 上的选项有什么想法吗?

提前致谢!

最佳答案

在作业的默认配置中,第一列是 reducer 结果的键,第二列是值。为了产生结果,reducer 正在处理具有相同键的所有记录。因此,在您的情况下,您需要运行一个额外的 mapreduce 作业。该 map 会将第二列作为键,将第一列作为值。此作业将根据您的要求对数据进行分组。但是,如果您的数据量很小,则每个作业只设置一个 reducer -D mapred.reduce.tasks=1。

关于sorting - Hadoop - 按键正确排序并按 reducer 分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33326155/

相关文章:

python - 如何在 MapReduce 中查找前 10 个元素

c# - 按多个键值对数组进行排序

scala - Spark Job通过运行相同的映射3次而不断失败

docker - Hortonworks Docker Sandbox环境无法启动

hadoop - 在Hadoop中使用Wikipedia数据集进行pagerank

java - Spark on yarn jar 上传问题

python - 如何改进我的代码以处理大量数据?

php - 基于文本字段将字段显示为 yyyy/mm/dd

java - 无法使用 Java 连接到 Hbase

hadoop - 使用 Hadoop 去规范化