目录
如果用户在一次Session过程中访问的页面路径为3,9,10,那么页面3跳到页面9叫一次单跳,单跳转化率就是统计页面点击的概率。
如:计算3-9的单跳转化率,先获取符合条件的Session对于页面3的访问次数A,然后获取符合条件的Session中访问页面3又接着访问页面9的次数B,那么 B/A 就是3-9的页面单跳转化率。
根据这个指标可以去尝试分析整个网站,产品,各个页面的表现,及时作出更改。
数据说明:

时间_用户ID_sessionID_页面ID_动作时间_搜索_点击(品类ID、产品ID)_下单(品类ID、产品ID)_支付(品类ID、产品ID)_城市ID
可以根据数据格式模拟生成数据,也可以在网站爬!
没有数据可以私聊我。
import org.apache.spark.{SparkConf, SparkContext}
object TopThree {
def main(args: Array[String]): Unit = {
//TODO 创建环境
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("TOP")
val sc = new SparkContext(sparkConf)
//TODO 单跳转换率
//读取日志文件
val rdd = sc.textFile("datas/action.txt")
val dataRDD = rdd.map(
action => {
val datas = action.split("_")
UserVisitAction(
datas(0),
datas(1).toLong,
datas(2),
datas(3).toLong,
datas(4),
datas(5),
datas(6).toLong,
datas(7).toLong,
datas(8),
datas(9),
datas(10),
datas(11),
datas(12).toLong
)
}
)
dataRDD.cache()
//TODO 计算分母
val pageCount = dataRDD.map(
action => {
(action.page_id, 1L)
}
).reduceByKey(_ + _).collect().toMap
//println(pageCount)
//TODO 计算分子
//根据session分组
val sessionRDD = dataRDD.groupBy(_.session_id)
//根据时间排序
val mapRDD = sessionRDD.mapValues(
iter => {
val sortList = iter.toList.sortBy(_.action_time)
val flowIds = sortList.map(_.page_id)
val pageflowIds = flowIds.zip(flowIds.tail)
pageflowIds.map(
t => {
(t, 1)
}
)
}
)
val flatRDD = mapRDD.map(_._2).flatMap(list => list)
val datacountRDD = flatRDD.reduceByKey(_ + _)
//计算:分子/分母
datacountRDD.foreach{
case ((pageid1,pageid2),sum) => {
val lon = pageCount.getOrElse(pageid1, 0L)
println(s"${pageid1}到${pageid2}单跳转换率为:" + (sum.toDouble/lon))
}
}
//TODO 关闭环境
sc.stop()
}
//用户访问动作表
case class UserVisitAction(
date: String,//日期
user_id: Long,//用户ID
session_id: String,//SessionID
page_id: Long,//页面ID
action_time: String,//动作的时间
search_keyword: String,//搜索关键词
click_category_id: Long,//商品品类ID
click_product_id: Long,//商品ID
order_category_ids: String,//订单中所有品类的ID集合
order_product_ids: String,//订单中所有商品的ID集合
pay_category_ids: String,//支付中所有品类的ID集合
pay_product_ids: String,//支付中所有商品的ID集合
city_id: Long//城市ID
)
}

本文为学习笔记的记录