publicstatic List<MemberSex>memberSexEtl(SparkSession session){// 先用sql得到每个性别的count统计数据
Dataset<Row> dataset = session.sql("select sex as memberSex, count(id) as sexCount "+" from ecommerce.t_member group by sex");
List<String> list = dataset.toJSON().collectAsList();// 对每一个元素依次map成MemberSex,收集起来
List<MemberSex> result = list.stream().map( str -> JSON.parseObject(str, MemberSex.class)).collect(Collectors.toList());return result;}
2.2 统计平台近期新增注册人数、每日的总订单量以及订单流水金额等
// 近七天注册人数统计
String memberSql ="select date_format(create_time,'yyyy-MM-dd') as day,"+" count(id) as regCount, max(id) as memberCount "+" from ecommerce.t_member where create_time >='%s' "+" group by date_format(create_time,'yyyy-MM-dd') order by day";
memberSql = String.format(memberSql, DateUtil.DateToString(sevenDayBefore, DateStyle.YYYY_MM_DD_HH_MM_SS));
Dataset<Row> memberDs = session.sql(memberSql);
2.3 统计活动前后平台注册量、订单量、订单总金额的周环比
publicstatic List<RegVo>regWeekCount(SparkSession session){
LocalDate now = LocalDate.of(2019, Month.NOVEMBER,30);
Date nowDay = Date.from(now.atStartOfDay(ZoneId.systemDefault()).toInstant());
Date lastTwoWeekFirstDay = DateUtil.addDay(nowDay,-14);
String sql ="select date_format(create_time,'yyyy-MM-dd') as day,"+" count(id) as regCount from ecommerce.t_member "+" where create_time >='%s' and create_time < '%s' "+" group by date_format(create_time,'yyyy-MM-dd')";
sql = String.format(sql,
DateUtil.DateToString(lastTwoWeekFirstDay, DateStyle.YYYY_MM_DD_HH_MM_SS),
DateUtil.DateToString(nowDay, DateStyle.YYYY_MM_DD_HH_MM_SS));
Dataset<Row> dataset = session.sql(sql);
List<String> list = dataset.toJSON().collectAsList();
List<RegVo> result = list.stream().map(str -> JSON.parseObject(str, RegVo.class)).collect(Collectors.toList());return result;}
2.4 统计优惠券即将过期时间,供短信营销服务进行对持券用户的消费唤醒
publicstatic List<CouponRemindVo>couponRemindCount(SparkSession session){
LocalDate now = LocalDate.of(2019, Month.NOVEMBER,30);
Date nowDay = Date.from(now.atStartOfDay(ZoneId.systemDefault()).toInstant());
Date sevenDayBefore = DateUtil.addDay(nowDay,-7);
String sql ="select date_format(create_time,'yyyy-MM-dd') as day, "+" count(member_id) as couponCount "+" from ecommerce.t_coupon_member where coupon_id != 1 "+" and create_time >= '%s' "+" group by date_format(create_time,'yyyy-MM-dd')";
sql = String.format(sql,
DateUtil.DateToString(sevenDayBefore, DateStyle.YYYY_MM_DD_HH_MM_SS));
Dataset<Row> dataset = session.sql(sql);
List<String> list = dataset.toJSON().collectAsList();
List<CouponRemindVo> result = list.stream().map(str -> JSON.parseObject(str, CouponRemindVo.class)).collect(Collectors.toList());return result;}