https://blog.csdn.net/qq_16403141/article/details/77598532
setOutputKeyClass和setOutputValueClass默认是同时设置map和reduce的输出类型的。
想要分别设置map和reduce的输出类型,有如下解决办法:
当K2, V2 和K3 , V3类型不一致时,我们需要用setMapOutputKeyClass和setMapOutputValueClass来设置map的输出类型。仍以K2, V2类型为Text,Text而K3, V3类型为Text,IntWritable为例,设置如下:
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Text.class);
setMapOutputKeyClass和setMapOutputValueClass会覆盖setOutputKeyClass和setOutputValueClass设置的效果,这样一来,setMapOutputKeyClass和setMapOutputValueClass设置的是map的输出类型,而setOutputKeyClass和setOutputValueClass设置的就只是reduce的输出类型。