SparkStreaming窗口操作经典案例

本文介绍了使用SparkStreaming进行实时数据分析的应用场景,如社交媒体、电商和搜索引擎中的热门话题追踪。通过设定窗口长度和滑动间隔,可以每5分钟更新一次过去30分钟的热搜内容,展示排名前三的话题。文章还探讨了窗口操作的原理和参数设置,强调它们必须是源DStream批处理间隔的倍数。

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

1.背景描述

  • 在社交网络(微博),电子商务(京东)、搜索引擎(百度)、股票交易中人们关心的内容之一是我所关注的内容中,大家正在关注什么
  • 在实际企业中非常有价值
  • 例如:我们关注过去30分钟大家都在热搜什么?并且每5分钟更新一次。要求列出来搜索前三名的话题内容
    2.原理图
    在这里插入图片描述
    如图所示,每当窗口滑过DStream时,落在窗口内的源RDD被组合并被执行操作以产生windowed DStream的RDD。在上面的例子中,操作应用于最近3个时间单位的数据,并以2个时间单位滑动。这表明任何窗口操作都需要指定两个参数。
     窗口长度(windowlength) - 窗口的时间长度(上图的示例中为:15)。
     滑动间隔(slidinginterval) - 两次相邻的窗口操作的间隔(即每次滑动的时间长度)(上图示例中为:10)。
    这两个参数必须是源DStream的批间隔的倍数(上图示例中为:5)。

3.代码

 问题:
  *       下述代码每隔20秒回重新计算之前60秒内的所有数据,如果窗口滑动时间间隔太短,那么需要重新计算的数据就比较大,非常耗时
  *       怎么理解呢?窗口滑动时间间隔短的话,与窗口长度的交集每次都必须重新计算,浪费资源,避免交集太大的话就应该设置滑动间隔长一点
  *    //第一个Seconds是窗口大小(3个RDD一共需要的时间),第二个Seconds是窗口间隔时间
  *       searchPair.reduceByKeyAndWindow((v1:Int, v2:Int) => v1+v2, (v1:Int, v2:Int) => v1-v2, Seconds(60), Seconds(20))
  *
object OnlineHotItems {
  def main(args: Array[String]): Unit = {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值