目录
UserVisitSessionAnalyzeSpark.java
本篇文章将介绍用户访问session分析-session随机抽取之计算每天每小时session数量。
代码
UserVisitSessionAnalyzeSpark.java
/** * 特别说明 * 我们知道,要将上一个功能的session聚合统计数据获取到,就必须是在一个action操作触发job之后 * 才能从Accumulator中获取数据,否则是获取不到数据的,因为没有job执行,Accumulator的值为空 * 所以,我们在这里,将随机抽取的功能的实现代码,放在session聚合统计功能的最终计算和写库之前 * 因为随机抽取功能中,有一个countByKey算子,是action操作,会触发job */ randomExtractSession(filteredSessionid2AggrInfoRDD);
/** * 随机抽取session * @param sessionid2AggrInfoRDD */ private static void randomExtractSession( JavaPairRDD<String, String> sessionid2AggrInfoRDD) { // 第一步,计算出每天每小时的session数量,获取<yyyy-MM-dd_HH,sessionid>格式的RDD JavaPairRDD<String, String> time2sessionidRDD = sessionid2AggrInfoRDD.mapToPair( new PairFunction<Tuple2<String,String>, String, String>() { private static final long serialVersionUID = 1L; @Override public Tuple2<String, String> call( Tuple2<String, String> tuple) throws Exception { String aggrInfo = tuple._2; String startTime = StringUtils.getFieldFromConcatString( aggrInfo, "\\|", Constants.FIELD_START_TIME); String dateHour = DateUtils.getDateHour(startTime); return new Tuple2<String, String>(dateHour, aggrInfo); } }); /** * 思考一下:这里我们不要着急写大量的代码,做项目的时候,一定要用脑子多思考 * * 每天每小时的session数量,然后计算出每天每小时的session抽取索引,遍历每天每小时session * 首先抽取出的session的聚合数据,写入session_random_extract表 * 所以第一个RDD的value,应该是session聚合数据 * */ // 得到每天每小时的session数量 Map<String, Object> countMap = time2sessionidRDD.countByKey(); }