我使用两个映射器和两个reducer 。我得到以下错误:
. lang。 ClassCastException : org.apache.hadoop.io。LongWritable不能强制转换为 org.apache.hadoop.io.Text
这是因为第一个reducer写入 <Text, IntWritable>
,而我的第二个映射器正在获取 <Text,IntWritable>
,但是,当我读取时,映射器默认使用<LongWritable, Text>
。
job2.setInputFormatClass(MyInputFormat.class);
是否有办法设置InputFormat类接收<Text,IntWritable>
?
映射器的输入类型是由InputFormat设置的。
一般来说,当你像这样将作业链接在一起时,最好使用SequenceFileOutputFormat
,下一个作业使用SequenceFileInputFormat
。通过这种方式,类型将为您处理,并且您将类型设置为相同,即映射器的输入与之前的reducer的输出相同。
您不需要自己的输入格式。您只需要为第一个作业设置SequenceFileOutputFormat,为第二个作业设置SequenceFileInputFormat。
TextInputFormat使用LongWritable键和Text值,但SequenceFileInputFormat使用用于存储输出的任何类型。