Hadoop:为什么明确要求job.setOutputKeyClass和setOutputValueClass?

Hadoop:为什么明确要求job.setOutputKeyClass和setOutputValueClass?,hadoop,Hadoop,要配置hadoop作业,我们必须明确指定以下内容: job.setOutputKeyClass(Text.class) job.setOutputValueClass(IntWritable.class) 但是,“母类”已经说明输出键和值是Text和intwriteable public class MyReducer extends Reducer<Text, IntWritable, Text, IntWritable> ... 公共类MyReducer扩展了Reducer

要配置hadoop作业,我们必须明确指定以下内容:

job.setOutputKeyClass(Text.class)

job.setOutputValueClass(IntWritable.class)
但是,“母类”已经说明输出键和值是
Text
intwriteable

public class MyReducer extends Reducer<Text, IntWritable, Text, IntWritable> ...
公共类MyReducer扩展了Reducer。。。
它也可以在我们重写的reduce函数的原型中找到

@Override
public void reduce (final Text key, final Interable<IntWritable> values, ...
@覆盖
public void reduce(最终文本键、最终交互值。。。
所以我的问题是:为什么在设置作业时需要明确地配置它,而在其他地方已经说过了

此外,如果我想要类型为
LongWritable
的输出值,我可以这样做吗


注:这里是hadoop的新手,所以我可能错过了一些东西。如果你有一个关于hadoop内部工作原理的好文档,请随意分享(我仍然有糟糕的法语文档和edureka视频)

我相信答案包括“类型擦除”或者不知道传递哪个类来代替泛型类型,因此必须由作业指定。是的,输出可以是任何可写类型