hadoop job.setOutputKeyClass()在输出结果中有什么作用?

时间:2018-08-25 06:05:05

标签: java class hadoop mapreduce

在常见的mapreduce程序(如字数统计)中,我们有:

public static class MyMapper extends Mapper(Object, Text, Text/*output key class*/, IntWritable/*output value class*/){
    public void main(...){
        ...
        context.write(word, one);...
    }
}
public static class MyReducer extends Reducer(Text, IntWritable, Text, IntWritable>{
    public void reduce(...){
        ...
        context.write(key, result);
    }
}

然后在主要功能中指定:

job.setOutputKeyClass(Text.class)
job.setOutputValueClass(IntWritable.class);

我没有看到两个“ set”函数的必要性,因为这两个映射器中的“ context”对象都减少了并且已经写出了输出字节,为什么我们仍然需要设置OutputKeyClass和OutputValueClass?谁将使用此“类”信息?我猜这个“设置”方法就像一个过滤器,用于修改输出内容,或者像java.io中的适配器模式那样包装:

new InputStreamReader(new FileInputStream(filename));

我只是不确定,我不确定。如果mapper / reducer通用类与“ setOutputKeyClass”不同,那会怎么办?

您需要帮助解释吗?

0 个答案:

没有答案