遇到的一个MR处理业务

最近遇到的一个要求使用MR处理的业务,原始数据一共有7个字段,原始数据中的两个字段可以根据客户提供的方法得出一个指标。
要求:
1、新的数据是在原始的数据后面调加上这个指标
2、保证数据没有重复的
3、。。。
由于保密,数据就不贴出来了。
拿到这个一共有二个思路:
1、 在map函数中解析出这两个字段,然后根据方法得出指标,在最后写出去的时候context.write()时将value也就是原始数据的一行加上得出的指标一起当做Key写出到reduce中,这里是要是要走reduce的,不然会生成多个文件,而且是有重复的。这时经过shuffle后,到达reduce函数中,此时经过分组,相同的key只剩下一个,而value为空,此时达到去重的目的,直接context.writer()将Key输出,即可得到结果。
2、这个思路比1要性能方面低一些,就是在map函数时将原始字段和最后得出的指标分别作为key和value写出,到了reduce函数中,只获取value的迭代器中的第一个值,然后和key最为最后的Key写出去,也能得到去重后的数据。这是因为这样做的话,数据中会存在相同的key,这样在shuffle过程中相同key的value会组合成一个迭代器,然后传输到reduce端,比1来说造成了一定的网络IO的开销,另外在reduce函数中还要进行迭代,取出第一个值,然后再写出去,所以性能方面要低,而且有些麻烦。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值