一、需求分析 ---------------------------------- 1.已知数据 top10热门品类 2.目的 获取每个top10品类点击次数最多的10个session,以及其对应的访问明细 二、思路分析 -------------------------------------- 1.拿到符合筛选条件的session的明细数据 2.按照session粒度进行聚合,获取到session对每个品类的点击次数,用flatMap,算子函数返回的是<categoryid,(sessionid,clickCount)> 3.按照品类id,分组取top10,获取到top10活跃session;groupByKey;自己写算法,获取到点击次数最多的前10个session,直接写入MySQL表;返回的是sessionid 4.获取各品类top10活跃session的访问明细数据,写入MySQL 5.本地测试 三、具体步骤 --------------------------------------- 1.根据之前的top10热门品类的id,生成一份RDD top10CategoryIdRDD <top10categoryid, top10categoryid> 2.获取top10品类的,每个session的点击次数 a.获取每个session对应的访问行为明细row <sessionid,[rows]> sessionid2detailsRDD JavaPairRDD<String, Iterable<Row>> sessionid2detailsRDD = sessionid2detailRDD.groupByKey(); b.获取每个session中,点击的品类及其次数 <categoryid, sessionid+clickcount> categoryid2sessionCountRDD JavaPairRDD<Long, String> categoryid2sessionCountRDD = sessionid2detailsRDD.flatMapToPair(...) c.获取到to10热门品类,被各个session点击的次数<categoryid, sessionid+clickcount> top10CategorySessionCountRDD JavaPairRDD<Long, String> top10CategorySessionCountRDD = top10CategoryIdRDD.join(categoryid2sessionCountRDD).mapToPair(...); d.分组取TopN算法获取top10活跃session //以categoryid进行分组,得到<categoryid, Iterable[sessionid+clickcount]> top10CategorySessionCountsRDD JavaPairRDD<Long, Iterable<String>> top10CategorySessionCountsRDD = top10CategorySessionCountRDD.groupByKey(); //TopN算法实现,获取每个品类的top10活跃用户 JavaPairRDD<String, String> top10SessionRDD = top10CategorySessionCountsRDD.flatMapToPair(...//Top10算法...) //获取top10活跃session的明细数据,并写入MySQL JavaPairRDD<String, Tuple2<String, Row>> sessionDetailRDD = top10SessionRDD.join(sessionid2detailRDD); e.top10排序算法 // 遍历排序数组 for(int i = 0; i < top10Sessions.length; i++) { // 如果当前i位,没有数据,那么直接将i位数据赋值为当前sessionCount if(top10Sessions[i] == null) { top10Sessions[i] = sessionCount; break; } else { long _count = Long.valueOf(top10Sessions[i].split(",")[1]); // 如果sessionCount比i位的sessionCount要大 if(count > _count) { // 从排序数组最后一位开始,到i位,所有数据往后挪一位 for(int j = 9; j > i; j--) { top10Sessions[j] = top10Sessions[j - 1]; } // 将i位赋值为sessionCount top10Sessions[i] = sessionCount; break; } // 比较小,继续外层for循环 } }
电商用户行为分析大数据平台(五)-- 获取top10品类的点击次数最多的10个session
猜你喜欢
转载自blog.csdn.net/xcvbxv01/article/details/86530196
今日推荐
周排行