我想从reducer的输出中提取不同的值。为此,我在单独的mapper和reducer中编写代码。也就是说,我有一个mapper reducer用于生成训练文件,第二个mapper-reducer给出训练文件中的不同行。我想要两个文件用于测试目的。那么如何将第一个reducer的输出用作另一个mapper作为输入?
答案 0 :(得分:1)
您可以轻松地执行此操作:只需将第一个作业的输出目录作为输入目录传递给第二个作业。我在这个例子中称之为 outputTempDir :
String inputDir = "/input";
String outputTempDir = "/output/Temp"
String outputFinalDir = "/output/Final"
Configuration conf = new Configuration();
Job job1 = Job.getInstance(conf, "JOB_1");
job1.setMapperClass(Mapper1.class);
job1.setReducerClass(Reducer1.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
FileInputFormat.addInputPath(job1, new Path(inputDir));
FileOutputFormat.setOutputPath(job1, new Path(outputTempDir));
boolean success = job1.waitForCompletion(true);
if (success) {
Job job2 = Job.getInstance(conf, "JOB_2");
job2.setMapperClass(Mapper2.class);
job2.setReducerClass(Reducer2.class);
job2.setInputFormatClass(KeyValueTextInputFormat.class);
FileInputFormat.addInputPath(job2, new Path(outputTempDir));
FileOutputFormat.setOutputPath(job2, new Path(outputFinalDir));
success = job2.waitForCompletion(true);
}
return success;
确保第一个作业的输出格式与第二个作业的输入格式兼容。
答案 1 :(得分:0)
也许你需要像Oozie这样的调度工作。
Oozie让您完成任务的工作流程,并将一个输出连接到其他任务的输入。
oozie文档: https://oozie.apache.org/docs/4.2.0/index.html
Oozie在视觉上为ui提供了节目安排。