我在使用一个 M/R 作业的输出作为另一个作业的输入时遇到问题。根据这篇文章和许多其他在线资源,一种方法是创建一个job1,然后创建一个job2。但是,当我这样做时,我收到了这个错误:
Error: java.lang.ClassCastException: org.apache.hadoop.io.Text cannot be cast to org.apache.hadoop.io.LongWritable
我唯一一次使用 LongWritable 作为一个类,是我的映射器的关键。我记得这需要保持这样,因为这是输入文件中的偏移量。当我将签名更改为 时Text
,如下所示:
public class ErrorMapperCombiner extends Mapper<Text, Text, Text, IntWritable>
我收到此错误:
Error: java.lang.ClassCastException: org.apache.hadoop.io.IntWritable cannot be cast to org.apache.hadoop.io.Text
那么如何将一个 M/R 作业的输出用作另一个 M/R 作业的输入呢?
我在我的“跑步者”类中使用它来链接:
job1.setOutputFormatClass(SequenceFileOutputFormat.class);
job1.setOutputKeyClass(Text.class);
job1.setOutputValueClass(IntWritable.class);
.....
job2.setInputFormatClass(SequenceFileInputFormat.class);