29.session随机抽取之实现思路分析
2017-03-25 15:17
302 查看
本文为《Spark大型电商项目实战》 系列文章之一,主要分析用户访问session随机抽取的实现思路,并创建所需的MySQL表,为后面的编码实现做准备。
举例:从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发生的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数据库。
使用SQLyog工具在
将
将
本文为《Spark大型电商项目实战》系列文章之一。
更多文章:Spark大型电商项目实战:http://blog.csdn.net/u012318074/article/category/6744423
实现功能
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
相关文章推荐
- MYSQL 随机 抽取实现方法及效率分析
- MYSQL 随机 抽取实现方法及效率分析
- 翻翻git之---自定义邮件发送按钮SendButton(流程分析,实现思路可以学习下)
- 一日一案例12java实现随机抽取幸运观众
- PHP实现多图上传(结合uploadify插件)思路分析
- 31.session随机抽取之按时间比例随机抽取算法实现
- 翻翻git之---自己定义邮件发送buttonSendButton(流程分析,实现思路能够学习下)
- C#--第九周实验--任务3--定义一个静态成员方法,使用Random实现从一组数中随机抽取n个不重复的数。
- Python 结巴分词实现关键词抽取分析
- 实现邮箱找回的思路分析
- Spring 源码分析(三) —— AOP(三)实现思路
- 【源码分析】极验验证官方SDK源码分析和实现思路
- Java中的不可变类的概念及实现思路分析
- Oracle 中实现随机抽取数据
- 青蛙跳台阶衍生之变态跳台阶(递归,思路分析及代码实现)
- PHP实现多图上传(结合uploadify插件)思路分析
- Python实现Excel随机抽取数
- 数据库中定义触发器实现:从多张表随机抽取数据组合成一张新表
- 百度地图SDK-----实现简单路线规划功能思路分析
- JavaScript实现班级随机点名小应用需求的具体分析