分享

求问,hive实现二次排序?

a3087661 发表于 2015-5-24 19:13:14 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 11 61924
用什么函数,几个reduce?我想用distribute by和sort by 函数 但是没实现。求指点

已有(11)人评论

跳转到指定楼层
NEOGX 发表于 2015-5-24 23:18:35
楼主为什么二次排序,场景是什么
回复

使用道具 举报

leo_1989 发表于 2015-5-24 23:56:27

假如要对两个字段排序,只需要一个语句即可
楼主参考这个例子:
有一张表,mid是指这个store所属的商户,money是这个商户的盈利,name是这个store的名字
store:

midmoneyname
AA15.0商店1
AA20.0商店2
BB22.0商店3
CC44.0商店4

    执行hive语句:

[mw_shl_code=sql,true]select mid, money, name from store distribute by mid sort by mid asc, money asc  [/mw_shl_code]
所有的mid相同的数据会被送到同一个reducer去处理,这就是因为指定了distribute by mid,这样的话就可以统计出每个商户中各个商店盈利的排序了(这个肯定是全局有序的,因为相同的商户会放到同一个reducer去处理)。这里需要注意的是distribute by必须要写在sort by之前。

来源:
hive中order by,sort by, distribute by, cluster by作用以及用法


回复

使用道具 举报

tntzbzc 发表于 2015-5-25 00:54:06
hive 二次排序,楼主自己发明词,详细说说自己的想要达到的目的
回复

使用道具 举报

a3087661 发表于 2015-5-25 07:32:56
tntzbzc 发表于 2015-5-25 00:54
hive 二次排序,楼主自己发明词,详细说说自己的想要达到的目的

就是mapreduce的二次排序,比如一个表 name      id   
C             7
C             1
D             5
B              3
A              9  
D              7
Z               6
实现输出是
A              9
B              3
C               1
C               7
D              5
D              7
Z               6
回复

使用道具 举报

a3087661 发表于 2015-5-25 07:33:50
NEOGX 发表于 2015-5-24 23:18
楼主为什么二次排序,场景是什么

就是mapreduce的二次排序,比如一个表 name      id   
C             7
C             1
D             5
B              3
A              9  
D              7
Z               6
实现输出是
A              9
B              3
C               1
C               7
D              5
D              7
Z               6
回复

使用道具 举报

a3087661 发表于 2015-5-25 07:47:42
本帖最后由 pig2 于 2015-5-25 09:58 编辑
leo_1989 发表于 2015-5-24 23:56
假如要对两个字段排序,只需要一个语句即可
楼主参考这个例子:
有一张表,mid是指这个store所属的商户 ...

我昨天也是按这个语句但是输出的结果不对

Image 1.png
回复

使用道具 举报

tntzbzc 发表于 2015-5-25 13:58:57
a3087661 发表于 2015-5-25 07:47
我昨天也是按这个语句但是输出的结果不对

好像只有Z不对。楼主试试去掉Z


回复

使用道具 举报

a3087661 发表于 2015-5-25 14:11:46
tntzbzc 发表于 2015-5-25 13:58
好像只有Z不对。楼主试试去掉Z

也不能哪个记录不对我就去掉啊……是hql语句有问题,
回复

使用道具 举报

tntzbzc 发表于 2015-5-25 14:23:38
a3087661 发表于 2015-5-25 14:11
也不能哪个记录不对我就去掉啊……是hql语句有问题,


这样可以排除问题呀
你把a,b,c一直到z。
如果只有z有问题,这样你就定位到问题了。
然后在想怎么改sql的问题。
如果问题定位不到,怎么改hql那
回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条