2013-11-15 97 views
0

我使用一个M/R作业的输出作为另一个作业的输入时遇到问题。根据这个post和许多其他在线资源,一种方法是创建一个job1,然后创建一个job2。然而,当我这样做,我收到此错误:使用hadoop作业的输出作为另一个的输入

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作业的输出作为输入到另一个?

我在我的“亚军”类链也使用此:

job1.setOutputFormatClass(SequenceFileOutputFormat.class); 

job1.setOutputKeyClass(Text.class); 
job1.setOutputValueClass(IntWritable.class); 

..... 

job2.setInputFormatClass(SequenceFileInputFormat.class); 

回答

0

我设置值的两倍。 (例如)

job1.setOutputFormatClass(TextOutputFormat.class); 
.... 
job1.setOutputFormatClass(SequenceFileOutputFormat.class); 

虽然SequenceFileOutputFormat在它之后,所以我会认为这个值会被使用。但是,现在起作用了。

相关问题