0

我正在运行一个简单的 hadoop 程序,但出现以下错误:

java.io.IOException: Type mismatch in key from map: expected org.apache.hadoop.io.Text, recieved org.apache.hadoop.io.LongWritable

映射器:

public static class myMapper extends Mapper<LongWritable, Text, Text, Text>
public void map(LongWritable key, Text line,OutputCollector<Text,Text> output, Reporter reporter) throws IOException, InterruptedException

减速器:

public static class triangleCounterReducer extends Reducer<Text, Text, Text, Text> 
public void reduce(Text key,Iterable<Text> line,OutputCollector<Text,Text> output,Reporter reporter) throws IOException, InterruptedException

主要的:

...
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Text.class);
...

我怎样才能解决这个问题????

4

1 回答 1

0

看起来您使用的是新的 API 类(您的 mapper 扩展了 mapred.Mapper),但您已经使用旧 API 编写了 map 方法(您使用的是 OutputCollector 和 Reporter)

将您的 mapper 映射签名和 reducer reduce 方法更改为以下内容:

public void map(LongWritable key, Text value, Context context) { .. }
public void reduce(Text key, Iterable<Text> value, Context context) { .. }

@Override如果您在方法上方添加注释也会有所帮助,如果您有错误的签名,这将导致编译器失败。

于 2013-02-02T19:50:05.893 回答