我试图从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);
1条答案
按热度按时间7y4bm7vi1#
这个
write
方法MultipleOutputs
类有三个签名,如下所示。看起来您使用的是第二个,但是更改了key和value参数。另外,如果传递整个值,我也不知道这个方法的行为
Iterable
.作为建议,您可以使用第三个签名,这更简单,因为您不需要do call
addNamedOutput
可以给任何人写信baseOutputPath
.例如: