Spark session聚合分析

本文介绍如何使用Spark进行Session级别的数据聚合分析,包括构建Spark上下文、生成模拟数据、创建DAO组件、获取Session对应的action信息及对行为数据按Session粒度进行聚合的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

Session聚合分析解析   步骤

构建spark上下文


Session聚合分析解析   步骤

构建spark上下文  查取需要执行任务

//构建spark上下文
        SparkConf  conf=new SparkConf().setAppName(MyConstants.SPARK_APP_NAME_SESSION).setMaster("local[*]");
        JavaSparkContext sc = new JavaSparkContext(conf);
        SQLContext sqlContext=getSQLContext(sc.sc());

        //生成模拟数据
        mockData(sc,sqlContext);

        //创建使用的DAO组件
        ITaskDAO taskDao = DAOFactory.getTaskDAO();
        //首先查出指定任务,并获取任务查询参数
        Long taskId = ParamUtils.getTaskIdFromArgs(args, MyConstants.SPARK_LOCAL_TASKID_SESSION);
        Task task = taskDao.findById(taskId);
        JSONObject taskParam = JSONObject.parseObject(task.getTaskParam());

获取session对应的action信息

// 如果要进行session粒度的数据聚合
        // 首先要从user_visit_action表中,查询出来指定日期范围内的行为数据
        
        /**
         * actionRDD,就是一个公共RDD
         * 第一,要用ationRDD,获取到一个公共的sessionid为key的PairRDD
         * 第二,actionRDD,用在了session聚合环节里面
         * 
         * sessionid为key的PairRDD,是确定了,在后面要多次使用的
         * 1、与通过筛选的sessionid进行join,获取通过筛选的session的明细数据
         * 2、将这个RDD,直接传入aggregateBySession方法,进行session聚合统计
         * 
         * 重构完以后,actionRDD,就只在最开始,使用一次,用来生成以sessionid为key的RDD
         * 
         */

JavaRDD<Row> actionRDD = SparkUtils.getActionRDDByDateRange(sqlContext, taskParam);
JavaPairRDD<String, Row> sessionid2actionRDD = getSessionid2ActionRDD(actionRDD);




		/**
	 * 获取sessionid2到访问行为数据的映射的RDD
	 * @param actionRDD 
	 * @return
	 */
	public static JavaPairRDD<String, Row> getSessionid2ActionRDD(JavaRDD<Row> actionRDD) {
//		return actionRDD.mapToPair(new PairFunction<Row, String, Row>() {
//
//			private static final long serialVersionUID = 1L;
//			
//			@Override
//			public Tuple2<String, Row> call(Row row) throws Exception {
//				return new Tuple2<String, Row>(row.getString(2), row);  
//			}
//			
//		});
		
		return actionRDD.mapPartitionsToPair(new PairFlatMapFunction<Iterator<Row>, String, Row>() {

			private static final long serialVersionUID = 1L;

			@Override
			public Iterable<Tuple2<String, Row>> call(Iterator<Row> iterator)
					throws Exception {
				List<Tuple2<String, Row>> list = new ArrayList<Tuple2<String, Row>>();
				
				while(iterator.hasNext()) {
					Row row = iterator.next();
					list.add(new Tuple2<String, Row>(row.getString(2), row));  
				}
				
				return list;
			}
			
		});
	}

对行为数据按session粒度进行聚合

// 首先,可以将行为数据,按照session_id进行groupByKey分组
        // 此时的数据的粒度就是session粒度了,然后呢,可以将session粒度的数据
        // 与用户信息数据,进行join
        // 然后就可以获取到session粒度的数据,同时呢,数据里面还包含了session对应的user的信息
        // 到这里为止,获取的数据是<sessionid,(sessionid,searchKeywords,clickCategoryIds,age,professional,city,sex)>  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值