如何解决错误的密钥类:org.apache.hadoop.io.IntWritable类不是org.apache.hadoop.io.Text类
我有一个映射器和一个简化器。整个代码都是从WordCount示例中修改的,但是输入和输出类型却根据我的需要进行了修改。
错误似乎是由于输入/输出类型不匹配造成的,但不确定出了什么问题。
public static class TokenizerMapper
extends Mapper<Object,Text,Text>{
private Text word = new Text();
public void map(Object key,Text value,Context context
) throws IOException,InterruptedException {
//blah blah
}
}
public static class IntSumReducer
extends Reducer<Text,IntWritable,Text> {
private IntWritable result = new IntWritable();
public void reduce(Text key,Iterable<Text> values,InterruptedException {
//blah blah
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf,"word count");
job.setJarByClass(WordCount.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(IntWritable.class);
job.setOutputValueClass(Text.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Text.class);
FileInputFormat.addInputPath(job,new Path(args[0]));
FileInputFormat.addInputPath(job,new Path(args[1]));
FileOutputFormat.setOutputPath(job,new Path(args[2]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
运行代码时,出现如下错误:
java.io.IOException: wrong key class: class org.apache.hadoop.io.IntWritable is not class org.apache.hadoop.io.Text
at org.apache.hadoop.mapred.IFile$Writer.append(IFile.java:191)
at org.apache.hadoop.mapred.Task$CombineOutputCollector.collect(Task.java:1574)
at org.apache.hadoop.mapred.Task$NewCombinerRunner$OutputConverter.write(Task.java:1891)
at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:89)
at org.apache.hadoop.mapreduce.lib.reduce.WrappedReducer$Context.write(WrappedReducer.java:105)
at WordCount$IntSumReducer.reduce(WordCount.java:47)
at WordCount$IntSumReducer.reduce(WordCount.java:35)
at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:171)
at org.apache.hadoop.mapred.Task$NewCombinerRunner.combine(Task.java:1912)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.sortAndSpill(MapTask.java:1662)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.flush(MapTask.java:1505)
at org.apache.hadoop.mapred.MapTask$NewOutputCollector.close(MapTask.java:735)
at org.apache.hadoop.mapred.MapTask.closeQuietly(MapTask.java:2076)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:809)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:347)
at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:271)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。