是否可以根据键将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])
有人可以指导我怎么做吗?
答案 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