我正在运行一个简单的 wordcount 程序,但出现以下错误:
Type mismatch in key from map: expected org.apache.hadoop.io.Text, received org.apache.hadoop.io.LongWritable
这是什么意思,我该如何纠正它?
您可以在 main 函数中使用以下任一行:
conf.setMapOutputKeyClass(Text.class);
conf.setMapOutputValueClass(IntWritable.class);
假设您使用的是 JobConf conf;
或者
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
假设您正在使用 Job job = new Job();
您正在提供一个序列文件的输入,该文件LongWritable
的键为 ,而预期的序列文件的键应为Text
.
如果您在输入格式类时使用 TextInputFormat,则可能会发生这种情况。它会生成 LongWritable 类型的键和 Text 类型的值。但您的应用程序可能需要 Text 类型的键。这就是为什么当您按照 shailesh 的指示显式设置 MapOutputKeyClass 时使用“job.setMapOutputKeyClass(Text.class)”它适合你。