當我試圖地圖從Hadoop的行動本書基於Hadoop的0.20 API我得到了錯誤的Hadoop的Map Reduce程序
java.io.IOException的減少編程例如:預計組織:從地圖中值類型不匹配。 apache.hadoop.io.IntWritable,收到org.apache.hadoop.io.Text
但據我檢查我正在通過一切。如果有人能幫助我,這將是非常有幫助的。
這是代碼。它與本書中的代碼相同。
@SuppressWarnings("unused")
public class CountPatents extends Configured implements Tool {
@SuppressWarnings("deprecation")
public static class MapClass extends MapReduceBase implements Mapper<Text, Text, Text, Text> {
public void map(Text key, Text value,OutputCollector<Text, Text> output,Reporter reporter) throws IOException {
output.collect(value, key);
}
}
public static class Reduce extends MapReduceBase implements Reducer<Text, Text, Text, IntWritable> {
public void reduce(Text key, Iterator<Text> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
int count=0;
while(values.hasNext()){
count=count+1;
values.next();
}
output.collect(key, new IntWritable(count));
}
}
public int run(String[] args) throws Exception {
Configuration conf = getConf();
JobConf job = new JobConf(conf, CountPatents.class);
Path in = new Path(args[0]);
Path out = new Path(args[1]);
FileInputFormat.setInputPaths(job, in);
FileOutputFormat.setOutputPath(job, out);
job.setJobName("MyJob");
job.setMapperClass(MapClass.class);
job.setReducerClass(Reduce.class);
job.setInputFormat(KeyValueTextInputFormat.class);
job.setOutputFormat(TextOutputFormat.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
job.set("key.value.separator.in.input.line", ",");
JobClient.runJob(job);
return 0;
}
public static void main(String[] args) throws Exception {
int res = ToolRunner.run(new Configuration(), new CountPatents(), args);
System.exit(res);
}
}
上同時調用setMapOutputKeyClass和setMapOutputValueClass來顯式提供。 Hadoop強制您在三個地方重複鍵的類型 - 映射器定義,還原器定義和作業配置。所有三個人必須匹配才能運行。 – 2011-03-24 00:40:09
我試過這樣做,但沒有奏效。然後我轉換程序,使輸入和輸出基本上只是文本。這工作! – Sri 2011-03-25 04:46:18