Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多输出路径(Java-Hadoop-MapReduce)_Java_Hadoop_Mapreduce_Output - Fatal编程技术网

多输出路径(Java-Hadoop-MapReduce)

多输出路径(Java-Hadoop-MapReduce),java,hadoop,mapreduce,output,Java,Hadoop,Mapreduce,Output,我做了两个MapReduce工作,我希望第二个工作能够将我的结果写入两个不同的文件,在两个不同的目录中。 我希望在某种意义上类似于FileInputFormat.addInputPath(..,多输入路径),但用于输出 我是MapReduce的新手,我有一个特殊的特点,就是用Hadoop 0.21.0编写代码 我在Reduce步骤中使用了context.write(..),但我不知道如何控制多个输出路径 谢谢你的时间 我的第一份工作中的reduceCode向您展示了我只知道如何输出(它进入一个/

我做了两个MapReduce工作,我希望第二个工作能够将我的结果写入两个不同的文件,在两个不同的目录中。 我希望在某种意义上类似于FileInputFormat.addInputPath(..,多输入路径),但用于输出

我是MapReduce的新手,我有一个特殊的特点,就是用Hadoop 0.21.0编写代码 我在Reduce步骤中使用了
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

所以我在你提到的最后一条评论中采用了这个方法,阿马尔。我不知道它是否有效,我的HDF还有其他问题,但在我忘记之前,让我们把我的发现放在这里,为了文明:

多重输出不能代替FormatOutputFormat。您可以使用FormatOutputFormat定义一个输出路径,然后可以使用多个MultipleOutput添加更多输出路径。 addNamedOutput方法:字符串namedOutput只是一个描述对象的单词。
实际上,您在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);
    }
}