2013-11-15 98 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在它之後,所以我會認爲這個值會被使用。但是,現在起作用了。

相關問題