4,需求一 ( 日新日活 ) : 用户 session 统计,用户行为,action 表,步长,时长,session 聚合,

1 ,一个 session :

  1. 开始 : 从用户进入到我们的网站开始。
  2. 结束 : 离开我们的网站。

2 ,用户行为 :action ( 4 个行为 )

点击,搜索,下单,付款

3 ,session - action : 对应关系

  1. session - action : 1 对多
  2. 孙 : 登录一次,可以有很多操作
  3. 图解 :
    在这里插入图片描述

4 ,步长 :

action 个数

5 ,session 时长 : 在线多久

时长 = 最后的 action 时间 - 开始 action 时间

6 ,中间结果留痕 :

中间结果,有可能在后面用到,所以留下他。

7 ,查询 action 表所有内容 :

package com.atguigu.session

import java.util.UUID
import com.atguigu.commons.conf.ConfigurationManager
import com.atguigu.commons.constant.Constants
import net.sf.json.JSONObject
import org.apache.spark.SparkConf
import org.apache.spark.sql.{DataFrame, SparkSession}

object MyTest {
    def main(args: Array[String]): Unit = {
    
        //  1 ,过滤条件 :获取统计任务参数【为了方便,直接从配置文件中获取,企业中会从一个调度平台获取】
        //      指定用户信息,我们只统计蛮族这种要求的用户的信息
        val jsonStr = ConfigurationManager.config.getString(Constants.TASK_PARAMS)
        //      转化成 json 格式
        val taskParam = JSONObject.fromObject(jsonStr)
        //  2 ,uuid :mysql 使用,任务的执行 ID,用户唯一标识运行后的结果,用在 MySQL 数据库中
        val taskUUID = UUID.randomUUID().toString
        //  3 ,spark 配置参数类
        val sparkConf = new SparkConf().setAppName("SessionAnalyzer").setMaster("local[*]")
        //      创建 Spark 客户端,为了使用 sparkSql ,并且支持 hive
        val spark = SparkSession.builder().config(sparkConf).enableHiveSupport().getOrCreate()
        //      Spark 上下文
        val sc = spark.sparkContext
    
        //  4 ,读数据 : 首先要从 user_visit_action 的 Hive 表中,查询出来指定日期范围内的行为数据,得到所有符合日期条件的数据
    
        val df: DataFrame = spark.sql("select count(1) from user_visit_action")
        val df2: DataFrame = spark.sql("select count(1) from user_visit_action where user_id != 50")
        println("**********************************")
        df.show()
        println("**********************************")
        df2.show(50)
        println("**********************************")
        spark.close()
    }
}

8 ,action 数据的样子 :

+----------+-------+--------------------+-------+------------------+--------------+-----------------+----------------+------------------+-----------------+----------------+---------------+-------+
|      date|user_id|          session_id|page_id|       action_time|search_keyword|click_category_id|click_product_id|order_category_ids|order_product_ids|pay_category_ids|pay_product_ids|city_id|
+----------+-------+--------------------+-------+------------------+--------------+-----------------+----------------+------------------+-----------------+----------------+---------------+-------+
|2019-08-27|     50|d719c10c4e324542a...|      0|2019-08-27 7:08:38|          null|               -1|              -1|              null|             null|               6|              7|      1|
|2019-08-27|     50|d719c10c4e324542a...|      3|2019-08-27 7:48:42|          null|               -1|              -1|                77|               77|            null|           null|      2|
|2019-08-27|     50|d719c10c4e324542a...|      3|2019-08-27 7:29:53|          null|                3|               4|              null|             null|            null|           null|      8|
|2019-08-27|     50|d719c10c4e324542a...|      8|2019-08-27 7:23:13|          null|               -1|              -1|              null|             null|               1|             66|      7|
|2019-08-27|     50|d719c10c4e324542a...|      9|2019-08-27 7:46:51|          null|               -1|              -1|                52|               94|            null|           null|      5|
|2019-08-27|     50|d719c10c4e324542a...|      2|2019-08-27 7:50:41|          null|               -1|              -1|                10|               59|            null|           null|      7|
|2019-08-27|     50|d719c10c4e324542a...|      7|2019-08-27 7:36:08|          null|               23|              70|              null|             null|            null|           null|      1|
|2019-08-27|     50|d719c10c4e324542a...|      1|2019-08-27 7:08:05|          null|               -1|              -1|                33|               30|            null|           null|      4|
|2019-08-27|     50|d719c10c4e324542a...|      0|2019-08-27 7:28:26|          null|               -1|              -1|                48|               43|            null|           null|      9|
|2019-08-27|     50|d719c10c4e324542a...|      5|2019-08-27 7:24:32|          null|               -1|              -1|              null|             null|              57|             23|      1|
|2019-08-27|     50|d719c10c4e324542a...|      1|2019-08-27 7:47:41|          null|               -1|              -1|                42|               87|            null|           null|      5|
|2019-08-27|     50|d719c10c4e324542a...|      8|2019-08-27 7:02:43|          null|               -1|              -1|              null|             null|              83|             75|      1|
|2019-08-27|     50|d719c10c4e324542a...|      5|2019-08-27 7:52:43|          null|               -1|              -1|              null|             null|               9|             11|      8|
|2019-08-27|     50|d719c10c4e324542a...|      4|2019-08-27 7:27:57|           保温杯|               -1|              -1|              null|             null|            null|           null|      3|
|2019-08-27|     50|d719c10c4e324542a...|      6|2019-08-27 7:21:32|          null|               -1|              -1|                32|               61|            null|           null|      1|
|2019-08-27|     50|d719c10c4e324542a...|      7|2019-08-27 7:48:18|          null|               -1|              -1|                26|               23|            null|           null|      0|

9 ,userInfo : 数据的样子

+-------+--------+-------+---+--------------+------+------+
|user_id|username|   name|age|  professional|  city|   sex|
+-------+--------+-------+---+--------------+------+------+
|     88|  user88| name88| 21|professional28|city29|  male|
|     89|  user89| name89| 38|professional44|city75|  male|
|     90|  user90| name90| 15|professional51|city55|  male|
|     91|  user91| name91| 38|professional88|city75|  male|
|     92|  user92| name92|  6|professional62|city60|female|
|     93|  user93| name93| 45|professional22| city5|female|
|     94|  user94| name94| 23|professional67|city90|  male|
|     95|  user95| name95|  1|professional44|city54|  male|
|     96|  user96| name96| 33|professional85| city5|  male|

10 ,把 sessionId 作为 key 分组求值 :

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值