为什么我们需要在MapReduce作业中显式设置OutputKey / InputKey Class,而Map和Reduce类必须分别扩展需要添加<InputKeyClass, InputValueClass, OuputKeyClass, OutputValueClass>
的Mapper和Reducer类?
一个例子:
JobConf:
job.setOutputKeyClass(NullWritable.class);
job.setOutputValueClass(Text.class);
job.setOutputFormatClass(TextOutputFormat.class);
减速机:
public static class ComputeReducer extends
Reducer<Text, Text, NullWritable, Text> {
如果我们已经明确地将reducer类设置为扩展'Reducer <Text, Text, NullWritable, Text>'
那么为什么需要传递OutputKey / value类?
答案 0 :(得分:3)
你必须这样做,因为所有遗传信息都在java中运行时丢失。