Spark Streaming项目实战(2) | 最近 1 小时广告点击量实时统计

请先Spark Streaming项目实战(1)
https://blog.csdn.net/qq_46548855/article/details/108436569
源码在github:https://github.com/lidonglin-bit/Spark-Streaming
统计各广告最近 1 小时内的点击量趋势:各广告最近 1 小时内各分钟的点击量
在这里插入图片描述

  • 分析怎么实现
统计各广告最近1个小时内的点击量趋势:各广告最近1个小时内分钟的点击量,每6秒统计一次
1.各广告      ->          按照广告分钟
2.最近1个小时,每6秒统计一次      ->     窗口:窗口长度1个小时   窗口的滑动步长5s
-------------

1.先把窗口分好
2.按照广告分组,进行聚合
3.按照广告分组,把这个广告下所有的分钟记录在一起
  • 代码实现
import bean.AdsInfo
import org.apache.spark.streaming.{
    
    Minutes, Seconds}
import org.apache.spark.streaming.dstream.DStream
import org.json4s.jackson.JsonMethods
import util.RedisUtil

object LastHourApp extends App {
    
    
  override def doSomething(adsInfoStream: DStream[AdsInfo]): Unit = {
    
    
    adsInfoStream
      //1.把窗口分好
      .window(Minutes(60),Seconds(3))
    //2.按照广告分组,进行聚合
      .map(info=>((info.adsId,info.hmString),1))
      .reduceByKey(_+_)
    //((4,10:14),100)
     // .print(1000)
    //3.按照广告分组,把这个广告下所有的分钟记录在一起
      .map{
    
    
        case ((ads,hm),count)=>(ads,(hm,count))
      }
      .groupByKey()
    //.print(10000)
    //4。写入到redis
      .foreachRDD(rdd=>{
    
    
        rdd.foreachPartition((it: Iterator[(String, Iterable[(String, Int)])]) => {
    
    
          if (it.nonEmpty){
    
       //只是判断是否有下一个元素,指针不会跳过这个元素
            //先建立到redis连接
            val client = RedisUtil.getClient
            //2.写元素到redis
            //2.1 一个一个的写(需求1用)
            //2.2 批次写入(需求二用)
            import org.json4s.JsonDSL._
            val key = "last:ads:hour:count"
            val map = it.toMap.map{
    
    
              case (adsId,it) => (adsId,JsonMethods.compact(JsonMethods.render(it)))
            }
            //sacla集合转换成java集合
            import scala.collection.JavaConversions._
            println(map)
            client.hmset(key,map)

            //3.关闭redis (用的是连接池,实际上是把连接归还给连接池)
            client.close()
          }
        })
      })

  }
}
  • 结果
    在这里插入图片描述
    redis中
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_46548855/article/details/108461751
今日推荐