连续时间查询问题-查询一个用户连续登陆天数超过N天的用户
2014-08-05 09:42
169 查看
问题:比如查询一个用户连续登陆天数超过7天的用户,或者查询连续在7天的某个时间段登陆的用户。
网上查询sql的语句的用法,对于hive来说也可以试试,查询词"SQL 连续天数查询"
如果使用hadoop如何解决??
思路(以连续N天登陆为例):
1、计算出每天登陆的用户集合
1、使用MR,第一个job(map以日期为key,对用户进行分组输出。reduce设计:内部构造一个以N容量大小的列表(作为队列),模拟一下啊(日期过来就是有序的,从小到大)
1)第一个日期过来,放在list里面,list里面的元素是一个map(key为日期,value为hashset 内部装的是用户ID))
2)第二个日期过来了,和上一个比较,如果是连续的放进去,如果不连续(就是说中间有一个日期没有记录),清空list,重新装作为第一个。
3)第三个来了..................同第二部
4)第N个过来了,放入list,此时list装了连续N个数据。这是就需要取各个元素的hashset的交集了,这样容易吧。
输出,以第一个日期-第N个日期为key,输出用户的交集(value)
5) 又来了,因为是队列,所以如第二部和第四部,就这样了。
----------------------
如果采用hive sql语句编写的话,很难,因为想不出来。
试着使用pig,数据流也很麻烦。所以想了上面这个方法。
----------------------
再想想MR,貌似内存浪费的太多,需要构造N个hashset来存储各个日期的用户ID,太浪费了。事实上,我们所比较的都是以list列表的第一个为依据,因为计算的是N个日期都有的用户ID,所以可以这样:
1、第一个过来了,直接构造一个map,key为用户ID,value为个数,第一次为1
2、第二个过来了,比较和第一个的日期,是否连续,不连续,删除第一个装第二个。连续,通过map来进行依次比较,如果有个数加1。
3、第三个过来了,需要维护一个全局变量来保证日期的有序。对map进行统计
4、。。。。。。
5、到第N个了,对map进行计算,统计value的个数是否为N,为N的就是所需要的结果。
6、貌似不行,此时我需要装前面第二个过来的为map,但是在前面已经被丢掉了。所以还是用第一种吧。这里只是给大家一个思路。
网上查询sql的语句的用法,对于hive来说也可以试试,查询词"SQL 连续天数查询"
如果使用hadoop如何解决??
思路(以连续N天登陆为例):
1、计算出每天登陆的用户集合
1、使用MR,第一个job(map以日期为key,对用户进行分组输出。reduce设计:内部构造一个以N容量大小的列表(作为队列),模拟一下啊(日期过来就是有序的,从小到大)
1)第一个日期过来,放在list里面,list里面的元素是一个map(key为日期,value为hashset 内部装的是用户ID))
2)第二个日期过来了,和上一个比较,如果是连续的放进去,如果不连续(就是说中间有一个日期没有记录),清空list,重新装作为第一个。
3)第三个来了..................同第二部
4)第N个过来了,放入list,此时list装了连续N个数据。这是就需要取各个元素的hashset的交集了,这样容易吧。
输出,以第一个日期-第N个日期为key,输出用户的交集(value)
5) 又来了,因为是队列,所以如第二部和第四部,就这样了。
----------------------
如果采用hive sql语句编写的话,很难,因为想不出来。
试着使用pig,数据流也很麻烦。所以想了上面这个方法。
----------------------
再想想MR,貌似内存浪费的太多,需要构造N个hashset来存储各个日期的用户ID,太浪费了。事实上,我们所比较的都是以list列表的第一个为依据,因为计算的是N个日期都有的用户ID,所以可以这样:
1、第一个过来了,直接构造一个map,key为用户ID,value为个数,第一次为1
2、第二个过来了,比较和第一个的日期,是否连续,不连续,删除第一个装第二个。连续,通过map来进行依次比较,如果有个数加1。
3、第三个过来了,需要维护一个全局变量来保证日期的有序。对map进行统计
4、。。。。。。
5、到第N个了,对map进行计算,统计value的个数是否为N,为N的就是所需要的结果。
6、貌似不行,此时我需要装前面第二个过来的为map,但是在前面已经被丢掉了。所以还是用第一种吧。这里只是给大家一个思路。
相关文章推荐
- 今天遇到一个问题:在程序中加入的定时触发器,当时出现这样一个问题,触发器定时2秒,程序从后台查询数据经过复杂处理后时间超过了2秒,我查阅好些网络上说有可能触发器等待程序执行完毕后,在触发下一次,也有说
- 时间模糊查询一个很变态的问题!
- 一个统计Linux用户登陆时间的脚本
- 求一个论坛的在线人数,假设有一个论坛,其注册ID有两亿个,每个ID从登陆到退出会向一个日志文件中记下登陆时间和退出时间,要求写一个算法统计一天中论坛的用户在线分布,取样粒度为秒。
- 查询用户上次登录时间问题
- 《指定一个用户只能在特定的时间里不能登陆》『罗斌原创』
- 关于到今天考勤系统连续上班天数的问题或者连续登陆天数的问题(sql)
- sql经典问题-查询连续的时间
- oracle 通过分析函数实现求连续天数登陆的用户
- 查询用户上次登录时间问题
- 查询登陆时间间隔不超过5分钟的所有记录
- 用户登录域时间过久问题解决案例 或显示电脑登陆到那个dc
- 如何查询出连续登陆的最长天数
- 传入用户id查询连续签到天数
- 实现session登陆时间的验证,验证用户登录页面的一个监听器
- 求一个论坛的在线人数,假设有一个论坛,其注册ID有两亿个,每个ID从登陆到退出会向一个日志文件中记下登陆时间和退出时间,要求写一个算法统计一天中论坛的用户在线分布,取样粒度为秒。
- 求一个论坛的在线人数,假设有一个论坛,其注册ID有两亿个,每个ID从登陆到退出会向一个日志文件中记下登陆时间和退出时间,要求写一个算法统计一天中论坛的用户在线分布,取样粒度为秒。
- PL/SQL Developer工具登陆一个新创建的用户进行查询时报Dynamic Performance Tables not accessible
- 在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时、分钟计算问题)
- 查询AD用户最后具体登陆时间