逗人,
我有一个Map Reduce应用程序,Mapper接受带有以下数据类型的输入作为输入键和输入值。
public class The_Mapper extends MapReduceBase implements
Mapper <**VIntWritable, Text,** VIntWritable, VIntWritable>
驱动程序中的输入文件格式为 SequenceFileInputFormat ..
我的输入是 .txt 文件。为了被接受作为应用程序的输入,我使用Identity Mapper和Reducer将其转换为Sequence File,但由于txt文件的输入键不能是VntWritable(应该是LongWritable),因此输出键和输出值来自Identity Reducer的数据类型包括:
public class My_TextToSequenceReducer extends MapReduceBase implements Reducer <LongWritable, Text, **LongWritable, Text**>
然而,这不能被接受为应用程序的Mapper的输入,正如我在上面的第一段中描述的那样,它会抛出
java.lang.ClassCastException: org.apache.hadoop.io.LongWritable cannot be cast to org.apache.hadoop.io.VIntWritable
在TexttoSequence作业设置中,输入格式声明如下:
conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(SequenceFileOutputFormat.class);
SequenceFileOutputFormat.setOutputCompressionType(conf, CompressionType.BLOCK);
然后,使用此设置将此作业的输出作为另一个作业的输入:
conf.setInputFormat(SequenceFileInputFormat.class);
conf.setOutputFormat(TextOutputFormat.class);
该应用程序是用Apache Hadoop 1.2.0编写的,它是开源的,我将它分叉以重新使用它。 (我用来运行它的Hadoop版本比较新,即2.7.5,但我猜它是向后兼容的......,这不应该是一个问题)
我该如何解决这个问题?提前谢谢!