点击上方蓝
字关注~
去重计算应该是数据分析业务里面常见的指标计算,例如网站一天的访问用户数、广告的点击用户数等等,离线计算是一个全量、一次性计算的过程通常可以通过distinct的方式得到去重结果,而实时计算是一种增量、长期计算过程,我们在面对不同的场景,例如数据量的大小、计算结果精准度要求等可以使用不同的方案。此篇介绍如何通过编码方式实现精确去重,以一个实际场景为例:计算每个广告每小时的点击用户数,广告点击日志包含:广告位ID、用户设备ID(idfa/imei/cookie)、点击时间。
实现步骤分析:
为了当天的数据可重现,这里选择事件时间也就是广告点击时间作为每小时的窗口期划分
数据分组使用广告位ID+点击事件所属的小时
选择processFunction来实现,一个状态用来保存数据、另外一个状态用来保存对应的数据量
计算完成之后的数据清理,按照时间进度注册定时器清理
实现
广告数据
case class AdData(id:Int,devId:String,time:Long)
分组数据
case class AdKey(id:Int,time:Long)
主流程