29.session随机抽取之实现思路分析
来源:互联网 发布:网络竞技游戏有哪些 编辑:程序博客网 时间:2024/05/16 04:37
本文为《Spark大型电商项目实战》 系列文章之一,主要分析用户访问session随机抽取的实现思路,并创建所需的MySQL表,为后面的编码实现做准备。
实现功能
session随机抽取:按每天的每个小时的session数量占当天session总数的比例,乘以每天要抽取的session数量,计算出每个小时要抽取的session数量;然后,在每天每小时的session中,随机抽取出之前计算出来的数量的session。
举例:从10000个session抽取100个session;0点~1点之间,有2000个session,占总session的比例就是0.2;按照比例,0点~1点需要抽取出来的session数量是100 * 0.2 = 20个;所以在0点~1点的2000个session中,随机抽取出来20个session。
实现思路
分析已有的数据:session粒度的聚合数据(需要计算出来session的start_time);
然后对session聚合数据进行映射,将每个session发生的yyyy-MM-dd_HH(start_time)作为key,value就是session_id,对上述数据使用countByKey算子,就可以获取到每天每小时的session数量;按时间比例随机抽取算法计算出每天每小时有多少session,根据这个数量计算出每天每小时的session占比,以及按照占比需要抽取多少session,这样就可以计算出每个小时内,从0~session数量之间的范围中,获取指定抽取数量个随机数,作为随机抽取的索引;
把之前转换后的session数据(以yyyy-MM-dd_HH作为key),执行groupByKey算子;然后可以遍历每天每小时的session,遍历时,遇到之前计算出来的要抽取的索引,即将session抽取出来;抽取出来的session,直接写入MySQL数据库。
创建数据库
根据思路分析常见所需的MySQL数据库,为之后编码过程做参考,并最终写入输出数据。
使用SQLyog工具在sparkproject
数据库中创建session_random_extract
表和session_detail
表。 session_random_extract
表结构如下
将task_id
设置为索引
session_detail
表结构如下:
将task_id
和session_id
设置为索引
本文为《Spark大型电商项目实战》系列文章之一。
更多文章:Spark大型电商项目实战:http://blog.csdn.net/u012318074/article/category/6744423
- 29.session随机抽取之实现思路分析
- 31.session随机抽取之按时间比例随机抽取算法实现
- 32.session随机抽取之根据随机索引进行抽取
- 34.session随机抽取之本地测试
- 30.session随机抽取之计算每天每小时session数量
- 33.session随机抽取之获取抽取session的明细数据
- MYSQL 随机 抽取实现方法及效率分析
- 模板抽取思路的分析
- Oracle 中实现随机抽取数据
- Oracle 中实现随机抽取数据
- Oracle 中实现随机抽取数据
- MYSQL的随机抽取实现方法
- Oracle 中实现随机抽取数据
- Python实现Excel随机抽取数
- 在线考试系统之随机抽取试题
- 使用Oracle分析函数随机抽取N条记录
- session聚合统计之重构实现思路与重构session聚合
- 24.session聚合统计之重构实现思路与重构session聚合
- 数据存储与访问之——初见SQLite数据库
- BZOJ2466: [中山市选2009]树
- attr与prop的区别
- 转载:年近30------职业回顾与思考
- 进程在计算机中的组成
- 29.session随机抽取之实现思路分析
- HDOJ-----5969---最大的位或---思维
- uva 247 Calling Circles floyd求传递闭包 + tarjin
- Linux下的Access、Modify、Change , touch的使用以及权限问题
- 算法题:好多鱼(牛客网)
- Spring maven 项目中的classpath路径问题
- 【TJOI2014】拼图(puzzle) dancing links X
- 奖券数目
- Dijistra优化