我们在用MapReduce做数据处理的时候,经常会遇到将只需要输出键或者值的情况,如context.write(new Text(record), new Text("")),这样得到结果每行尾部会自动加上一个制表符。尽管我们的值是空的,但是MapReduce默认输出的是键值对,且键值对之间默认的分隔符为制表符,这样可能对我们数据的后续处理会产生一些干扰,那么如何去掉或是更改这个制表符呢?这里提供三种解决办法:
方法一:将键设置为空值
一般我们用context写入数据的时候,是将要输出的值写在键处,而将值设为""。但是只要反过来,将键设为空值,而值设为我们要输出的条目,如context.write(null, new Text(record)),输出的每行后面就不会有制表符了。
方法二:自定义输出数据格式
自定义输出数据格式的步骤如下:
1)定义一个继承自OutputFormat的类,不过一般继承FileOutputFormat即可;
2)实现其getRecordWriter方法,返回一个RecordWriter类型
3)自定义一个继承RecordWriter的类,定义去writer方法,针对每个<key,value>写入文件数据。