首页 > 技术文章 > spark用户访问session分析

zhangweilun 2017-04-02 20:47 原文

 基础数据结构

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

     

推荐阅读