Hadoop作业中输出键类或值类是必需的还是可选的?

时间:2014-09-25 11:48:22

标签: java hadoop

在Java中的单个类MapReduce作业中,我是否必须设置输出键类或值类,或者它是可选的,如果未设置,则存在某种默认值?例如,如果我在工作中注释掉以下内容,它似乎运行正常,但我只想确认我没有遗漏任何内容。

有问题的行要注释掉......

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

示例数据文件,我在逗号上拆分并首先拉入最后一列......

600000US00601,00601,"00601 5-Digit ZCTA; 006 3-Digit ZCTA",11102
8600000US00602,00602,"00602 5-Digit ZCTA; 006 3-Digit ZCTA",12869
8600000US00603,00603,"00603 5-Digit ZCTA; 006 3-Digit ZCTA",12423
8600000US00604,00604,"00604 5-Digit ZCTA; 006 3-Digit ZCTA",33548

1 个答案:

答案 0 :(得分:2)

来自Hadoop权威指南[Ed 3rd / ch 7.3]:

Text Output
The default output format, TextOutputFormat, writes records as lines of text. Its keys 
and values may be of any type, since TextOutputFormat turns them to strings by calling 
toString() on them. Each key-value pair is separated by a tab character, although that 
may be changed using the mapred.textoutputformat.separator property. 

它指出了密钥和密钥上的TextOutputFormat次呼叫toString()输出时的值,因此可以接受任何类型。所以我认为在没有指定你提到的行的情况下运行简单的MR作业不会产生任何问题。

但是,当您明确指定其他输出格式时,肯定会产生问题,例如SimpleDBOutpFormat