项目功能流程
需求:获得用户访问初始时间和结束时间 通多计算步长来计算用户所占时间比 加入条件性别 年龄时长进行筛选
当用户访问后会有session存在数据库或者存在日志中
转化所有数据>计算>保存
用户操作,放在一起 转化格式 session对应所有数据 value(Array)
统计每一个用户的Array 再遍历处理
计算 步长 时长 转换为范围 便于统计 >计算百分比 >永久性存储数据库
(存储多种格式 比如数据库 redis Hive hBase) >Echarts展示数据
创建工具类Constant
object Constant {
val TIME_1S_3S ="1s_3s"
val TIME_4S_6S ="4s_6s"
val TIME_7S_9S ="7s_9s"
val TIME_10S_30S ="10s_30s"
val TIME_30S_60S ="30s_60s"
val TIME_1M_10M ="1m_10m"
val TIME_10M_30M ="10m_30m"
val TIME_30M = "30m+"
val STEP_1_3 ="1_3"
val STEP_4_6 ="4_6"
val STEP_7_9 ="7_9"
val STEP_10_30 ="10_30"
val STEP_30_60 ="30_60"
val STEP_60 ="60+"
val SESSION_COUNT = "session_count"
}
创建UserSeesion Object启动类
package com.obj.session
import com.dou.model.{SessionAggrStat, UserInfo, UserVisitAction}
import com.dou.util.{DateUtils, NumberUtils}
import org.apache.spark.sql.{SaveMode, SparkSession}
import java.util.{Date, UUID}
import com.alibaba.fastjson.JSON
object UserSession {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder()
.master("local")
.appName("session")
.enableHiveSupport() //开启内置hive
.getOrCreate()
//生产环境下,参数需要从外部传入
//设定条件,计算数据,最后得到结果,然后使用es展示在后台管理系统
//和当前项目结合使用
/*
页面埋点记录数据
发送后台记录日志
spark解析日志,计算,存入数据库
后台展示数据
* */
//可以根据用户性别 年龄 职业。。计算session
val startTimeParam = "2020-08-20 19:34:20"
val endTimeParam = "2020-08-20 19:40:20"
//定义json类型参数
val json = "{starTimeParam:'2020-08-20 19:34:20'," +
"endTimeParam:'2020-08-20 19:40:20'," +
"age:'1-10'," +
"city:'null'," +
"sex:'null'}"
val param = JSON.parseObject(json)
import spark.implicits._//隐式转换
//hive中读取这张表
val userVisitRDD =