如何配置Hadoop的映射器,使其采用<文本,不可写>



我使用两个映射器和两个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使用用于存储输出的任何类型。

相关内容

最新更新