分享

问个链式map的问题,ChainReducer.setReducer 后面跟个ChainReducer.addMapper 。...

536528395 发表于 2015-9-17 18:16:07 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 6 10273
主要想实现 wordcount  按照 词频排序功能:首先正常的mr  计算出 wordcount:aaa 3
bbb 2
ccc 5
ddd 1
然后在 ChainReducer.setReducer 后面跟个ChainReducer.addMapper , 把key value  反转 一下。 map 不是默认按照key排序么,所以希望输出结果为:


ChainReducer.addMapper(job, InverseMapper.class,   Text.class, IntWritable.class, IntWritable.class,Text.class, reduceConf2);
5 ccc
3 aaa
2 bbb
1 ddd

但是 实际结果 只是把 key  value 简单的 调换了顺序,并没有按照 key 排序:  输出结果:
3 aaa
2 bbb
5 ccc
1 ddd


这是什么情况阿???难道  ChainReducer.setReducer 后面ChainReducer.addMapper 只能 做简单的 处理 不是真正的map  ,不会按照key 排序??

已有(6)人评论

跳转到指定楼层
xuanxufeng 发表于 2015-9-17 18:22:12
对他们在(二次)排序下。
回复

使用道具 举报

536528395 发表于 2015-9-17 18:24:04
xuanxufeng 发表于 2015-9-17 18:22
对他们在(二次)排序下。

map  默认不是按照key 输出的么?? 那么ChainReducer.setReducer后面的 ChainReducer.addMapper  里面的map 为什么不会按照key输出阿??就是这规矩么??
还是我写的不对呢??
回复

使用道具 举报

xuanxufeng 发表于 2015-9-17 18:33:31
536528395 发表于 2015-9-17 18:24
map  默认不是按照key 输出的么?? 那么ChainReducer.setReducer后面的 ChainReducer.addMapper  里面的 ...

可能原因如下,这里只是举例:
map1:

3 aaa
2 bbb

map2:

5 ccc
1 ddd
他们是按照顺序输出的,但是组合起来就不是了


回复

使用道具 举报

536528395 发表于 2015-9-17 18:42:08
xuanxufeng 发表于 2015-9-17 18:33
可能原因如下,这里只是举例:
map1:

不是很明白阿,为什么会有map1  map2 呢。。。ChainReducer.addMapper  里面的输入不应该是 ChainReducer.setReducer里的输出么。。。不应该是在一起的么??
回复

使用道具 举报

xuanxufeng 发表于 2015-9-17 19:01:23
536528395 发表于 2015-9-17 18:42
不是很明白阿,为什么会有map1  map2 呢。。。ChainReducer.addMapper  里面的输入不应该是 ChainReducer ...

reduce也是有多个的。除非只有一个,这样是有序的
回复

使用道具 举报

536528395 发表于 2015-9-17 19:08:18
xuanxufeng 发表于 2015-9-17 19:01
reduce也是有多个的。除非只有一个,这样是有序的

对阿,我的reduce就是一个阿(job.setNumReduceTasks(1);)。。。但是结果 就是上面那样,没有排序。。。。。 不理解为什么。。。大神有空可以试下!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条