博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hive 面试题
阅读量:6070 次
发布时间:2019-06-20

本文共 2113 字,大约阅读时间需要 7 分钟。

使用 Hive或者自定义 MR 实现如下逻辑

product_no lac_id moment start_time user_id county_id staytime city_id
13429100031 22554 8 2013-03-11 08:55:19.151754088 571 571 282 571
13429100082 22540 8 2013-03-11 08:58:20.152622488 571 571 270 571
13429100082 22691 8 2013-03-11 08:56:37.149593624 571 571 103 571
13429100087 22705 8 2013-03-11 08:56:51.139539816 571 571 220 571
13429100087 22540 8 2013-03-11 08:55:45.150276800 571 571 66 571
13429100082 22540 8 2013-03-11 08:55:38.140225200 571 571 133 571
13429100140 26642 9 2013-03-11 09:02:19.151754088 571 571 18 571
13429100082 22691 8 2013-03-11 08:57:32.151754088 571 571 287 571
13429100189 22558 8 2013-03-11 08:56:24.139539816 571 571 48 571
13429100349 22503 8 2013-03-11 08:54:30.152622440 571 571 211 571
字段解释:
product_no:用户手机号;
lac_id:用户所在基站;
start_time:用户在此基站的开始时间;
staytime:用户在此基站的逗留时间。
需求描述:

根据 lac_id和 start_time知道用户当时的位置,根据 staytime知道用户各个基站的逗留时长。根据轨迹合

并连续基站的 staytime。
最终得到每一个用户按时间排序在每一个基站驻留时长

期望输出举例:

13429100082 22540 8 2013-03-11 08:58:20.152622488 571 571 270 571
13429100082 22691 8 2013-03-11 08:56:37.149593624 571 571 390 571
13429100082 22540 8 2013-03-11 08:55:38.140225200 571 571 133 571
13429100087 22705 8 2013-03-11 08:56:51.139539816 571 571 220 571
13429100087 22540 8 2013-03-11 08:55:45.150276800 571 571 66 571

 

hive实现:

select t.p,t.l,t.start,t.stay from (select b.product_no p,b.lac_id l,b.start_time start,b.staytime stay from net_time_sum a right outer join net_time b on a.product_no=b.product_no and a.lac_id = b.lac_id where a.product_no is  NULL union all select t1.p,t1.l,t1.start,t1.stay from (select c.product_no p,c.lac_id l,c.start_time start,c.staytime+d.staytime stay from net_time c left outer join net_time d on c.product_no=d.product_no and c.lac_id=d.lac_id where unix_timestamp(c.start_time)+c.staytime>unix_timestamp(d.start_time) and c.start_time<d.start_time)t1)t order by t.p,t.start desc;

MR实现:

思路为:

1、第一次mr

按照product_no lac_id 分组,然后对相同的分组,values进行排序,如果第一次的记录start_time+staytime >第二次start_time 并且 1.start_time<2.start_time 则进行合并

2、第二次mr

实现对第一次的输出进行按照start_time 进行排序

 

转载于:https://www.cnblogs.com/ggbond1988/p/5037704.html

你可能感兴趣的文章
canvas学习总结
查看>>
Java程序员月薪达到三万,需要技术水平达到什么程度?
查看>>
7天玩转机器学习
查看>>
CentOS 7 编译安装 PHP 7
查看>>
Mobx 源码阅读简记
查看>>
数据库条件查询
查看>>
Jekyll 动态地建立静态博客网站 (Get Started)
查看>>
阿里开发者们的第14个感悟:技术拓宽价值边界
查看>>
superset 性能优化1-已经使用中的superset更改默认数据源sqlite到mysql
查看>>
Vue中用props给data赋初始值遇到的问题
查看>>
CSS中的多种居中方式
查看>>
gof23行为类模式(golang版)
查看>>
《你不知道的javascript》笔记_作用域与闭包
查看>>
究竟什么是DOM?
查看>>
什么是AJAX?
查看>>
document与Object的关系
查看>>
深入解析Vue组件间通信
查看>>
SAP不同的产品是如何支持用户创建自定义字段的
查看>>
clay教程一之结点和数据操作
查看>>
九宫格抽奖--手撸代码
查看>>