多输出路径(Java-Hadoop-MapReduce)
我做了两个MapReduce工作,我希望第二个工作能够将我的结果写入两个不同的文件,在两个不同的目录中。 我希望在某种意义上类似于FileInputFormat.addInputPath(..,多输入路径),但用于输出 我是MapReduce的新手,我有一个特殊的特点,就是用Hadoop 0.21.0编写代码 我在Reduce步骤中使用了多输出路径(Java-Hadoop-MapReduce),java,hadoop,mapreduce,output,Java,Hadoop,Mapreduce,Output,我做了两个MapReduce工作,我希望第二个工作能够将我的结果写入两个不同的文件,在两个不同的目录中。 我希望在某种意义上类似于FileInputFormat.addInputPath(..,多输入路径),但用于输出 我是MapReduce的新手,我有一个特殊的特点,就是用Hadoop 0.21.0编写代码 我在Reduce步骤中使用了context.write(..),但我不知道如何控制多个输出路径 谢谢你的时间 我的第一份工作中的reduceCode向您展示了我只知道如何输出(它进入一个/
context.write(..)
,但我不知道如何控制多个输出路径
谢谢你的时间
我的第一份工作中的reduceCode向您展示了我只知道如何输出(它进入一个/./part*文件。但现在我希望能够为不同的输出指定两个精度文件,具体取决于键):
公共静态类NormalizeReducer扩展Reducer{
public void reduce(LongWritable键、Iterable值、上下文)抛出IOException、InterruptedException{
NetflixUser=newnetflixuser(key.get());
对于(NetflixRating r:值){
user.addRating(新NetflixRating(r));
}
user.normalizeRatings();
user.reducerations();
编写(键、用户);
}
}
编辑:所以我按照你提到的上一条评论中的方法,Amar。我不知道它是否有效,我的HDF还有其他问题,但在我忘记之前,让我们把我的发现放在这里,为了文明:
- 多重输出不能代替FormatOutputFormat。您可以使用FormatOutputFormat定义一个输出路径,然后可以使用多个MultipleOutput添加更多输出路径
- addNamedOutput方法:字符串namedOutput只是一个描述对象的单词
- 您实际上在write方法中定义了路径,即字符串baseOutputPath arg
实际上,您在write方法中定义了路径,即字符串baseOutputPath arg。checkout
MultipleOutputs
:看起来像这样!我不知道我怎么没有找到这个。。。我试试看,谢谢!还有一个问题:我们只能添加单词来描述路径,比如文档,为什么会这样?为什么我们不能设置一个完整的路径,以便能够在不同的目录中输出?是的,这是多输出的问题!可悲的是,我现在也没有答案,请看我的问题:请看这个答案的最后一条评论:,看看它是否有帮助。
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);
}
}