hive 实现多行转一行处理方法

本文介绍了一种使用分布式计算方法优化用户阅读数据统计的过程。通过将原本单机处理的大数据任务转换为分布式处理,显著提高了处理效率,从10小时缩短到20分钟。具体步骤包括使用SQL查询来获取用户阅读的书籍分类、数量等信息,并最终整合为易于阅读的格式。

最近公司在做客户端阅历数据分析,服务器端同事需要计算每个用户的读书分类,读了多少本书,读过多少本书,总时长,总分,数据量非常大,服务器同事那边单机处理一次需要10个小时,后来我拿来我们这边做,分布式计算总比单机计算快吧,所以分享一下:

1.需要统计每个用户的书籍分类

sql:

select  us.user_name,us.bid,b.classname  from  book_class  
b  join user_all_books_times us on (us.bid=b.bid)

 首先统计出来用户读书的分类

2.上面sql查询出来有三个字段需要转化为两个字段

user_name       classtypeNum 

张三                   1000003:56----分类10000003 有56本

sql:

hive -e "create table  user_book_class  as   select  
user_name,concat(classname,':',num) as cl from  (select
 user_name,classname,sum(1) as num from (select  
us.user_name,us.bid,b.classname  from  book_class  b  
join user_all_books_times_sup us on (us.bid=b.bid)) f 
 group by user_name,classname) f1"

 3.一个用户对应很多个分类,所以一个用户会有很多行记录,那么最后转化为一行

user_name      classtypesum

张三                  100004:56,100004:47,,,,,,,,,,

sql:

select user_name, concat_ws(',', collect_set(cl) as 
classtype  from  user_book_class where cl is not null 
and cl !=''  group by  user_name;

 最后满足需求,20分钟搞定,也可以自己写一个UTAF来实现。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值