spark用户访问session分析

基础数据结构

  • user_visit_action 点击流数据 (hive表)

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    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表)

    1

    2

    3

    4

    5

    6

    user_id //用户的唯一标识

    username //用户的登录名

    name //用户名

    age //年龄

    professinal //职业

    city //城市

  • task表(mysql表)

    1

    2

    3

    4

    5

    6

    7

    8

    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聚合统计的结果

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    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

    1

    2

    3

    4

    5

    6

    7

    8

    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  存储按点击,下单,支付的品类数据

    1

    2

    3

    4

    5

    6

    7

    8

    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

    1

    2

    3

    4

    5

    6

    7

    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明细数据

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    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`)

    )

猜你喜欢

转载自my.oschina.net/xiaominmin/blog/1795522
今日推荐