基础数据结构
- user_visit_action 点击流数据 (hive表)
date //日期:代表用户点击行为是在哪一天发生 采用时间戳好比较 user_id //代表这个点击行为是哪一个用户执行的 session_id //唯一标识了某个用户的一个访问session page_id //页面的id,点击品类,进入某个页面 action_time//这个点击行为发生的时间点 search_keyword //搜索的关键词 click_category_id //网站首页点击了某个品类 click_product_id //网站列表页点击了某个商品 order_category_ids //代表了将某些商品加入了购物车,然后一次性的对商品下了单,某次下单行为中,有哪些商品品类 order_product_ids //某次下单行为中,有哪些商品 pay_category_ids //一次支付行为中对应了哪些品类 pay_product_ids //支付行为中,对应了哪些具体的商品
- user_info 用户信息表(hive表)
user_id //用户的唯一标识 username //用户的登录名 name //用户名 age //年龄 professinal //职业 city //城市
-
task表(mysql表)
task_id //主键 task_name //任务名称 create_time //创建时间 start_time //开始运行的时间 finish_time //结束运行的时间 task_type //任务类型 task_status //任务状态,对应spark作业运行的状态 task_param //用来使用json的格式来封装用户提交的任务的特殊筛选参数
- 交互流程
1.j2ee平台的使用者,向平台提交任务(包含任务参数),并将任务插入到mysql表中的task表
2.Runtime,Process等API去执行一个封装了spark-submit命令的linux的shell脚本
3.然后编写jar提交spark集群中运行
需求分析
-
按条件筛选session
1.搜索过某些关键词的用户
2.访问时间在某个时间段内的用户
3.年龄在某个范围内的用户
4.职业在某个范围内的用户
5.某个城市发起的session
功能作用:对感兴趣的用户群体进行业务分析
-
统计出符合条件的session,访问时长在1s~3s,4s~6s,7s~9s,10s~30s,30s~60s,1m~3m,3m~10m,10m~30m
,30m以上的各范围的session占比,访问步长(访问时长除于点击的页面)在1~3,4~6,7~9,10~30,30~60,60以上的各范围内的session占比
功能作用:从全局的角度,符合某些条件的用户群体,使用我们的产品的一些习惯
- 在符合条件的session中,按照时间比例随机抽取1000个session
功能作用:对于符合条件的session,按照时间比例采样,具体观察每个session的点击流行为
- 在符合条件的session中,获取点击,下单和支付数量排名前10的品类
- 对于排名前10的品类,分别获取其点击次数排名前10的session
技术架构设计
数据表结构设计(MySQL面向结果)
- session_aggr_stat 存储session聚合统计的结果
CREATE TABLE `session_aggr_stat`( `task_id` int(11) NOT NULL, `session_count` int(11) DEFAULT NULL, `1s_3s` double DEFAULT NULL, `4s_6s` double DEFAULT NULL, `7s_9s` double DEFAULT NULL, `10s_30s` double DEFAULT NULL, `30s_60s` double DEFAULT NULL, `1m_3m` double DEFAULT NULL, `3m_10m` double DEFAULT NULL, `10m_30m` double DEFAULT NULL, `30m` double DEFAULT NULL, `1_3` double DEFAULT NULL, `4_6` double DEFAULT NULL, `7_9` double DEFAULT NULL, `10_30` double DEFAULT NULL, `30_60` double DEFAULT NULL, `60` double DEFAULT NULL, PRIMARY KEY (`task_id`) )ENGINE=InnoDB
- session_random_extract 存储按时间比例随机抽取出来的1000的session
CREATE TABLE `session_random_extract`( `task_id` int(11) NOT NULL, `session_id` varchar(255) DEFAULT NULL, `start_time` varchar(50) DEFAULT NULL, `end_time` varchar(50) DEFAULT NULL, `search_keywords` varchar(255) DEFAULT NULL, PRIMARY KEY (`task_id`) )
- top10_category 存储按点击,下单,支付的品类数据
CREATE TABLE `top10_category`( `task_id` int(11) NOT NULL, `category_id` int(11) DEFAULT NULL, `click_count` int(11) DEFAULT NULL, `order_count` int(11) DEFAULT NULL, `pay_count` int(11) DEFAULT NULL, PRIMARY KEY (`task_id`) )
- top10_category_session 存储top10品类的点击top10session
CREATE TABLE `top10_category_session`( `task_id` int(11) NOT NULL, `category_id` int(11) DEFAULT NULL, `click_count` int(11) DEFAULT NULL, `session_id` varchar(255) DEFAULT NULL, PRIMARY KEY (`task_id`) )
- session_detail 存储随机抽取出来的session的明细数据,top10品类的session明细数据
CREATE TABLE `session_detail`( `task_id` int(11) NOT NULL, `user_id` int(11) DEFAULT NULL, `session_id` varchar(255) DEFAULT NULL, `page_id` int(11) DEFAULT NULL, `page_name` varchar(255) DEFAULT NULL, `action_name` varchar(255) DEFAULT NULL, `search_keywords` varchar(255) DEFAULT NULL, `click_category_id` int(11) DEFAULT NULL, `click_product_id` int(11) DEFAULT NULL, `order_category_ids` varchar(255) DEFAULT NULL, `order_product_ids` varchar(255) DEFAULT NULL, `pay_category_ids` varchar(255) DEFAULT NULL, `pay_product_ids` varchar(255) DEFAULT NULL, PRIMARY KEY (`task_id`) )