您的位置:首页 > 其它

29.session随机抽取之实现思路分析

2017-03-25 15:17 302 查看
本文为《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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spark session