hive经典案列--top N(行转列\列转行)

列转行案列:现在有这样一份数据: exercise_topn.txt
 
需求:
求出每种爱好中,年龄最大的两个人(爱好,年龄,姓名)注意思考一个问题:如果某个爱好中的第二大年龄
有多个相同的怎么办?
 
其中需要注意的是:每一条记录中的爱好有多个值,以"-"分隔
id,姓名,年龄,爱好
id,name,age,favors

1,huangxiaoming,45,a-c-d-f

2,huangzitao,36,b-c-d-e

3,huanglei,41,c-d-e

4,liushishi,22,a-d-e

5,liudehua,39,e-f-d

6,liuyifei,35,a-d-e

思路总结:

1.先把爱好拆分成一条一条的数据,行转列我们可以用explode() + lateral view

2.按照爱好进行分组年龄进行排序取rownum<=2  我们可以用rownum over()

实现

1.select a.id,a.name,a.age, favor_view as favor from exercise_topn a 
alter view explode(split(a.favors,“-”))  favor_view as favor;

转
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值