1 ,一个 session :
- 开始 : 从用户进入到我们的网站开始。
- 结束 : 离开我们的网站。
2 ,用户行为 :action ( 4 个行为 )
点击,搜索,下单,付款
3 ,session - action : 对应关系
- session - action : 1 对多
- 孙 : 登录一次,可以有很多操作
- 图解 :
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|