文章地址:http://www.haha174.top/article/details/257633
项目源码:https://github.com/haha174/spark-session.git
在上面聚合的时候添加startTime
Constants.SESSION_PROJECT.FIELD_START_TIME + "=" + DateUtils.formatTime(startTime);
编写一个方法实现 获得每个小时session 数量
/**
* 随机抽取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;
System.out.println (aggrInfo);
String startTime = StringUtils.getFieldFromConcatString(
aggrInfo, "\\|", Constants.SESSION_PROJECT.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, Long> countMap = time2sessionidRDD.countByKey();
}