我做了两个mapreduce工作,我希望第二个工作能够将我的结果写入两个不同的文件,在两个不同的目录中。我想在某种意义上类似于fileinputformat.addinputpath(..,多输入路径),但对于输出。
我是mapreduce的新手,我有一种特殊的方法,可以用Hadoop0.21.0编写我的代码 context.write(..)
在我的reduce步骤中,但我不知道如何控制多个输出路径。。。
谢谢你的时间!
我的reducecode来自我的第一份工作,向您展示我只知道如何输出(它进入/./part*文件)。但现在我希望能够为不同的输出指定两个精度文件,具体取决于键):
public static class NormalizeReducer extends Reducer<LongWritable, NetflixRating, LongWritable, NetflixUser> {
public void reduce(LongWritable key, Iterable<NetflixRating> values, Context context) throws IOException, InterruptedException {
NetflixUser user = new NetflixUser(key.get());
for(NetflixRating r : values) {
user.addRating(new NetflixRating(r));
}
user.normalizeRatings();
user.reduceRatings();
context.write(key, user);
}
}
编辑:所以我做了你提到的最后一条评论中的方法,阿马尔。我不知道它是否有效,我的HDF还有其他问题,但在我忘记之前,让我们把我的发现放在这里,为了文明:
http://archive.cloudera.com/cdh/3/hadoop-0.20.2+228/api/org/apache/hadoop/mapreduce/lib/output/multipleoutputs.html
multipleoutputs不能代替formatoutputformat。使用formatoutputformat定义一个输出路径,然后可以使用多个multipleoutputs添加更多的输出路径。
addnamedoutput方法:字符串namedoutput只是一个描述的词。
实际上在write方法中定义了路径,即字符串baseoutputpath arg。
1条答案
按热度按时间baubqpgj1#
所以我用了你提到的最后一条评论中的方法,阿马尔。我不知道它是否有效,我的HDF还有其他问题,但在我忘记之前,让我们把我的发现放在这里,为了文明:
http://archive.cloudera.com/cdh/3/hadoop-0.20.2+228/api/org/apache/hadoop/mapreduce/lib/output/multipleoutputs.html
multipleoutputs不能代替formatoutputformat。使用formatoutputformat定义一个输出路径,然后可以使用多个multipleoutputs添加更多的输出路径。addnamedoutput方法:字符串namedoutput只是一个描述的词。实际上在write方法中定义了路径,即字符串baseoutputpath arg。