为同一个 reducer 函数收集不同的键 - HADOOP

Posted

技术标签:

【中文标题】为同一个 reducer 函数收集不同的键 - HADOOP【英文标题】:gather different keys to the same reducer function - HADOOP 【发布时间】:2014-06-08 18:24:28 【问题描述】:

我想将至少有一个共同整数的键的所有值收集到同一个 reducer 函数中。例如键“1,2”对应的所有值和键“2,3”对应的所有值都必须始终在同一个reducer函数中,因为这两个键中的整数2常见的。

换一种说法,就是想把“键相等条件”改成另外一个条件。

有没有办法做到这一点?它与 Partitioner 类有关还是我必须做一些完全不同的事情?

如果这很重要,我会使用 1.2.1 hadoop 版本。

提前致谢!

【问题讨论】:

你是指reducer function还是reducer task?因为每个作业只能有一个 reducer 函数...如果您的意思是 reducer 任务,那么分区函数会帮助您...还要记住所有具有相同值的键必须转到同一个 reducer 任务 下面我详细分析了! 【参考方案1】:

每个作业我只有一个 Reducer 函数,我同意这一点。但是,当我在 NetBeans 中运行 hadoop 作为模拟(不是在分布式模式下)时,它会为每个唯一键创建一个 reducer 任务。例如,如果我只有 3 个键 (k1,k2,k3),它将调用 reduce 函数 3 次,每个键一个。

example:
Reducer: key=k1
values which correspond to k1
Reducer: key=k2
values which correspond to k2
Reducer: key=k3
values which correspond to k3

因此,与键 k1 对应的值只能从该 reducer 的任务中访问,对于 k2 和 k3 值也是如此。我想要做的是将 k1 和 k2 收集到同一个任务(假设这两个键有共同点),这样我就可以从一个 reducer 任务中访问所有这些值(对应于 k1 和 k2 键)。

另外,我读了这个example,我以为我理解它,直到我运行它,我看到它再次创建了 2 个 reducer 任务,而不是分区器中年龄组的数量 3。

output example:
Reducer: female
Monica<tab>56<tab>92
Kristine<tab>38<tab>53
Alice<tab>23<tab>45
Nancy<tab>7<tab>98
Mary<tab>6<tab>93
Clara<tab>87<tab>72
Reducer: male
James<tab>34<tab>79
Jacob<tab>7<tab>23
Alex<tab>52<tab>69
Bob<tab>34<tab>89
Chris<tab>67<tab>97
Adam<tab>9<tab>37
Connor<tab>25<tab>27
Daniel<tab>78<tab>95

【讨论】:

以上是关于为同一个 reducer 函数收集不同的键 - HADOOP的主要内容,如果未能解决你的问题,请参考以下文章

CouchDB reduce函数的键(值)参数的排序顺序保证?

使用**收集关键字参数

ReplaceReducer 导致意外的键错误

reduce函数原理

Map Reduce 中的键值

什么是MapReduce?