MapReduce从LongWritable转换为VIntWritable

时间:2018-01-25 12:57:30

标签: hadoop mapreduce

逗人,

我有一个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,但我猜它是向后兼容的......,这不应该是一个问题)

我该如何解决这个问题?提前谢谢!

0 个答案:

没有答案