我的mapper和reducer类有以下签名:
MapperPrime extends Mapper<Text, Text, Text, Text>
ReducerPrime extends Reducer<Text, Text, Text, LongWritable>
当我运行代码时,执行到达reducer时会出现以下异常:
java.lang.ClassCastException: org.apache.hadoop.io.LongWritable cannot be cast to org.apache.hadoop.io.Text
at ReducerPrime.reduce(ReducerPrime.java:1)
当我将ReducerPrime中的第一个泛型类型从Text更改为LongWritable时,即
ReducerPrime extends Reducer<LongWritable, Text, Text, LongWritable>
不再抛出异常。是什么赋予了?为什么/ java会在哪里看到LongWritable?
减速器中的输入键,值类型是否与Mapper中的输出键,值类型完全匹配?
答案 0 :(得分:1)
为什么/ java会在哪里看到LongWritable
对于Mapper,TextInputFormat
的关键是文件偏移,这是一个很长的。值是文本行,因此是Text
可写对象。
减速器中的输入键,值类型是否与Mapper中的输出键,值类型完全匹配?
是的,它应该,但是因为我们现在看不到代码,很难说你写的是输出。