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。

实现思路

  1. 分析已有的数据:session粒度的聚合数据(需要计算出来session的start_time);
    然后对session聚合数据进行映射,将每个session发生的yyyy-MM-dd_HH(start_time)作为key,value就是session_id,对上述数据使用countByKey算子,就可以获取到每天每小时的session数量;

  2. 按时间比例随机抽取算法计算出每天每小时有多少session,根据这个数量计算出每天每小时的session占比,以及按照占比需要抽取多少session,这样就可以计算出每个小时内,从0~session数量之间的范围中,获取指定抽取数量个随机数,作为随机抽取的索引;

  3. 把之前转换后的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_idsession_id设置为索引
这里写图片描述

本文为《Spark大型电商项目实战》系列文章之一。
更多文章:Spark大型电商项目实战:http://blog.csdn.net/u012318074/article/category/6744423

0 0