您的代码示例不调用
Job#setInputFormatClass
。如果未明确设置输入格式,则默认值为
InputFormat
是
TextInputFormat
.
文本输入格式
,输入到映射器的键为
LongWritable
Text
.
由于您使用的是标识映射器,并且没有指定缩减器,因此作业的输出由映射器指定。身份映射器输出输入的任何内容,因此它接收(
可长写
文本
)元组作为输入,输出相同(
-&燃气轮机;
文本
)元组作为输出。
job.setOutputKeyClass(Text.class);
这试图指定作业的输出键为
,但如上所述,此作业的输出键实际上是
可长写
。这会导致图像中出现错误:
Error: java.io.IOException: Type mismatch in key from map: expected org.apache.hadoop.io.Text, received org.apache.hadoop.io.LongWritable
如果您取消对的呼叫
Job#setOutputKeyClass
,则错误将不再发生。
考虑这一点的另一种方法是考虑默认的MapReduce作业有效地做到了这一点:
job.setInputFormatClass(TextInputFormat.class);
job.setMapperClass(Mapper.class);
job.setMapOutputKeyClass(LongWritable.class);
job.setMapOutputValueClass(Text.class);
job.setPartitionerClass(HashPartitioner.class);
job.setNumReduceTasks(1);
job.setReducerClass(Reducer.class);
job.setOutputKeyClass(LongWritable.class);
job.setOutputValueClass(Text.class);
job.setOutputFormatClass(TextOutputFormat.class);
通过呼叫
job.setOutputKeyClass(Text.class)