Reducer根据键输出到不同的文件

时间:2014-04-11 05:45:31

标签: hadoop mapreduce

是否可以根据键将reducer的输出写入不同的文件?

例如,如果我将以下数据提供给reducer:

(Key, Value) ==> (1, A) (1, B) (2, C) (2, D)

输出应写入2个不同的文件output1和output2,

output1必须包含:

(key, Value) ==> (1, [A,B])

output2必须包含:

(key value) ==> (2, [C,D])

有人可以指导我怎么做吗?

3 个答案:

答案 0 :(得分:1)

默认分区程序为HashPartitoner

他们保证同一把钥匙在同一个减速器中结束。

如果您需要将不同键的相同值输出到一个文件 - 您可以使用Custom Partitioners

eg: 1,[A,B,G,M]
    1,[A,K,I,Y]
    2,[G,A,O]
    2,[U]

如果在同一个reducer中需要A包含值,则可以使用自定义分区器。

在这个特殊的例子中,我们打破了Reduce理论(相同的密钥进入同一个Reducer)。而实现自定义分区器

1,[A,B,G,M] 
1,[A,K,I,Y] 
2,[G,A,O] 

进入1 Reducer,即使它们不是同一个键。

选中此link

同时浏览Custom Partitioner : N number of keys to N different files

答案 1 :(得分:0)

我认为最简单的方法是使用MultipleOutputs。它允许您指定多个输出目的地以及何时在减速器中写入它们。

答案 2 :(得分:0)

您正在寻找 MultipleOutputs 。它允许您将数据写入多个目标(文件,Redis等NoSQL数据库,......)。这个链接可以帮助您入门:http://yaseminavcular.blogspot.fr/2011/04/hadoop-multipleoutputformat.html