前言
需求一:各范围session步长、时长所占比例统计的分析与实现
一、需求
在上一章节,根据过滤条件,已经得到了(sessionId, filteredRDD),并且更新了累加器中的三个field:1.session_count 2.time_period 3.step_period,根据累加器中数据,计算session各步长、各时长所占比例就可以了。
二、实现
声明
getSessionRatio
(sparkSession
, taskUUID
, sessionStatisticAccumulator
.value
)
定义
def getSessionRatio
(sparkSession
: SparkSession
,
taskUUID
: String,
value
: mutable
.HashMap
[String, Int]) :Unit={
val session_count
= value
.getOrElse
(Constants
.SESSION_COUNT
, 1).toDouble
val visit_length_1s_3s
= value
.getOrElse
(Constants
.TIME_PERIOD_1s_3s
, 0)
...
val step_length_1_3
= value
.getOrElse
(Constants
.STEP_PERIOD_1_3
, 0)
...
val visit_length_1s_3s_ratio
= NumberUtils
.formatDouble
(visit_length_1s_3s
/ session_count
, 2)
...
val step_length_1_3_ratio
= NumberUtils
.formatDouble
(step_length_1_3
/ session_count
, 2)
...
val stat
= SessionAggrStat
(taskUUID
, ... ,step_length_60_ratio
)
val statRDD
= sparkSession
.sparkContext
.makeRDD
(Array
(stat
))
import sparkSession
.implicits
._
statRDD
.toDF
().write
.format
("jdbc")
.option
("url", ConfigurationManager
.config
.getString
(Constants
.JDBC_URL
))
.option
("user", ConfigurationManager
.config
.getString
(Constants
.JDBC_USER
))
.option
("password", ConfigurationManager
.config
.getString
(Constants
.JDBC_PASSWORD
))
.option
("dbtable", "session_stat_1007")
.mode
(SaveMode
.Append
)
.save
()
}