flink实时项目电商用户行为分析(7)---商业指标统计分析之页面广告分析

该博客详细介绍了使用Apache Flink进行广告点击量统计和黑名单过滤的实现过程。通过创建执行环境,读取广告点击日志,转换样例类并设置水位线,利用KeyedProcessFunction实现黑名单过滤,以及aggregate方法进行窗口聚合统计。同时,展示了如何通过侧输出流捕获黑名单报警信息,并给出了具体代码实现。

目录

1.知识点

2.业务目标

3.流程心法

4.模块详解

4.1 定义输入输出样例类,定义黑名单样例类

4.2 主object实现

4.2.1 创建执行环境、读取数据、输入数据转换成样例类

4.2.2 黑名单的过滤实现

4.2.3 aggregate(AggregateFunction,WindowFunction)的使用

5.完整代码

1.知识点

  • scala样例类
  • flink读文件
  • assignAscendingTimestamps水位线
  • KeyedProcessFunction<K, I, O>使用
  • flink状态编程之键控状态
  • flink定时器的创建
      ctx.timerService().registerProcessingTimeTimer(ts)
  • flink定时器的触发操作,一般可以对状态进行清空
 override def onTimer(timestamp: Long, ctx: KeyedProcessFunction[(Long, Long), AdClickLog, AdClickLog]#OnTimerContext, out: Collector[AdClickLog]): Unit = {

    if (timestamp == resetTimerTsState.value()){
      isBlackState.clear()
      countState.clear()
    }
  }
  • flink侧输出流OutPutTag的使用
ctx.output(new OutputTag[BlackListUserWarning]("warning"),BlackListUserWarning(value.userId, value.adId, "Click ad over " + maxCount + " times today."))
  • aggregate方法的使用,预聚合中间结果(可以与processWindowFunction做比较)
  • aggregate输入(AggregateFunction , WindowFunction  )  预聚合在进行窗口内操作。
@PublicEvolving
  def aggregate[ACC: TypeInformation, V: TypeInformation, R: TypeInformation](
      preAggregator: AggregateFunction[T, ACC, V],
      windowFunction: WindowFunction[V, R, K, W]): DataStream[R] = {

2.业务目标

  • 页面广告点击量统计:每5s钟统计前一个小时的某个省份的广告点击总量

       窗口:1个小时

       步长:5s

       维度:省份

       指标:点击总量

       输出格式:

count result> AdClickCountByProvince(2017-11-26 11:01:30.0,beijing,11)
count result> AdClickCountByProvince(2017-11-26 11:01:30.0,zhejiang,2)
count result> AdClickCountByProvince(2017-11-26 11:01:30.0,henan,1)
count result> AdClickCountByProvince(2017-11-26 11:01:35.0,beijing,6)
count result> AdClickCountByProvince(2017-11-26 11:01:40.0,beijing,1)
  • 黑名单过滤:对当日点击某个adid大于某个值(如20000)的用户id拉入黑名单,并过滤

3.流程心法

  • 定义输入输出样例类,定义黑名单样例类
  • 主object

         1)创建执行环境,设置事件时间语义,设置并行度

         2)从文件中读取数据

         3)转换成样例类并设置assignAscendingTimestamps自增水位线

         4)  定义黑名单过滤KeyedProcessFunction

         5)开窗聚合统计,以province为keyBy,用aggregate或者ProcessWindowFunction。

         6)侧输出流获取并打印

         

4.模块详解

4.1 定义输入输出样例类,定义黑名单样例类

  输入-广告点击日志:用户id、广告id、省份、城市、时间戳  

  输出-按省份统计的点击:窗口结束时间、省份、点击量

  输出-黑名单报警:用户id、广告id、报警消息

// 定义输入输出样例类
case class AdClickLog(userId: Long, adId: Long, province: String, city: String, timestamp: Long)
case class AdClickCountByProvince(windowEnd: String, province: String, count: Long)

// 侧输出流黑名单报警信息样例类
case class BlackListUserWarning(userId: Long, adId: Long, msg: String)

4.2 主object实现

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值