multipleoutputs map reduce不起作用

zujrkrfu  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(340)

我试图从reducer将(键和值)写入不同的文件,但我只得到一个键和值的输出文件。

public static class Reduce
   extends Reducer<Text,Text,Text,Text> {
  private MultipleOutputs <Text,Text>mos;
@Override
protected void setup(Context context) throws IOException,           InterruptedException {      
    super.setup(context);
}
public void reduce(Text key, Text values, Context context ) throws IOException, InterruptedException {      
     mos.write(key.toString(),values, key); }  

@Override
    protected void cleanup(Context context) throws IOException,
            InterruptedException {
        super.cleanup(context);
    }   
}// end Reducer

//驱动程序:包含多个输出

job.setMapperClass(Map.class);
    job.setReducerClass(Reduce.class);
    job.setCombinerClass(Reduce.class);
    job.setInputFormatClass(TextInputFormat.class);
    job.setOutputFormatClass(TextOutputFormat.class);
    // set output key type   
    job.setOutputKeyClass(Text.class);
    // set output value type
    job.setOutputValueClass(Text.class);
    //set the HDFS path of the input data
    FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
    // set the HDFS path for the output
    FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
   //multiple output files
    MultipleOutputs.addNamedOutput(job, "express", TextOutputFormat.class, Text.class, Text.class);
7y4bm7vi

7y4bm7vi1#

这个 write 方法 MultipleOutputs 类有三个签名,如下所示。

write(KEYOUT key, VALUEOUT value, String baseOutputPath) 
           Write key value to an output file name.

write(String namedOutput, K key, V value) 
          Write key and value to the namedOutput.

write(String namedOutput, K key, V value, String baseOutputPath) 
           Write key and value to baseOutputPath using the namedOutput

看起来您使用的是第二个,但是更改了key和value参数。另外,如果传递整个值,我也不知道这个方法的行为 Iterable .
作为建议,您可以使用第三个签名,这更简单,因为您不需要do call addNamedOutput 可以给任何人写信 baseOutputPath .
例如:

mos.write(key, value, "express");

相关问题