千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

【热点话题】 零基础学IT IT学习教程 IT学习笔记 IT技术干货 IT培训机构 IT应聘面试 IT职场就业 Java培训机构哪些好
当前位置:首页  >  应聘面试  >  大数据面试题  > Spark Streaming 窗口函数

Spark Streaming 窗口函数

来源:千锋教育
发布人:syq
时间: 2022-08-11 16:56:00

  理解窗口的两个关键概念,窗口长度(window length)和滑动间隔(slide interval)。 窗口函数会把原始 DStream 的若干批次的数据合并成为一个新的带窗口的DStream。其中窗口长度即每次生成新 DStream 需合并的原始 DStream 个数。滑动间隔即合并的原始 DStream 的时间间隔。

Spark Streaming 窗口函数

  window

  根据窗口长度和窗口移动速率合并原始DStream 生成新 DStream。

  每 2 秒生成一个窗口长度为 5 秒的 Dstream val windowedDstream = dstream.countByWindow(Seconds( 5 ), Seconds( 2))

  countByWindow

  返回指定长度窗口中的元素个数

  每 2 秒统计一次近 5 秒长度时间窗口的 DStream 中元素的个数

  val windowedDstream = dstream.countByWindow(Seconds( 5 ), Seconds( 2))

  reduceByWindow(func, windowLength, slideInterval)

  对设定窗口的 DStream 做 reduce 操作,类似 RDD 的 reduce 操作,只是增加了时间窗口维度。

  每 2 秒合并一次近 5 秒长度时间窗口的 DStream 中元素用“-”分隔

  val windowedDstream = dstream.reduceByWindow(_ + "-" + _, Seconds( 5 ), Seconds( 2))

  reduceByKeyAndWindow(func, windowLength, slideInterval, [numTasks])

  根据 Key 和 Window 来做 Reduce 聚合操作,在上述 reduceByWindow 的基础上增加了 Key 维度,func 是相同 Key 的 value 值的聚合操作函数。数据源的 DStream 中的元素格式必须为 (k, v) 形式,windowLength 和 slideInterval同样是用于确定一个窗口 Dstream 作为数据源。numTasks 是一个可选的并发数参数。

  每 2 秒根据 Key 聚合一次窗口长度为 5 的 DStream 中元素,下例中聚合的方式为 value 相加。

  val windowedDstream = pairsDstream.reduceByKeyAndWindow((a:Int , b:Int) => (a + b) , Seconds(5) , Seconds( 2 ))

  reduceByKeyAndWindow(func, invFunc, windowLength, slideInterval, [numTasks])

  这个方法比上一个多传入一个函数 invFunc。func 是 value 值的聚合操作函数,在数据流入的时候执行这个操作。invFunc 是在数据流出窗口的范围后执行的操作。

  每 2 秒根据 Key 聚合一次窗口长度为 5 的 DStream 中元素,聚合的方式为 value 相加。

  invFunc:假设 invFunc 的参数如下例为 a 和 b,那么 a 是上个 window 经过 func 操作后的结果,b 为此次 window 与上次 window 在时间上交叉的元素经过 func 操作后结果。

  val windowedDstream = pairsDstream.reduceByKeyAndWindow((a: Int, b:Int ) => (a + b) , (a:Int, b: Int) => (a - b) , Seconds(5) , Seconds( 2 ))

  countByValueAndWindow(windowLength, slideInterval, [numTasks])

  统计时间窗口中元素值相同的元素个数,类似于 RDD 的 countByValue 操作,在这个基础上增加了时间窗口维度。同样,数据源的 DStream 中的元素格式必须为 (k, v) 形式,返回的 DStream 格式为 (K, Long)。

  每 2 秒根据 Key 聚合一次窗口长度为 5 的 DStream 中元素,下例中聚合的方式为 value 相加 val windowedDstream = pairsDstream.countByValueAndWindow(Seconds( 5 ), Seconds( 2))

  更多关于前端培训的问题,欢迎咨询千锋教育在线名师千锋教育拥有多年IT培训服务经验,采用全程面授高品质、高体验培养模式,拥有国内一体化教学管理及学员服务,助力更多学员实现高薪梦想。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

10年以上业内强师集结,手把手带你蜕变精英

请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通

免费领取

今日已有369人领取成功

刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取

推荐阅读

最新文章

开班信息
北京校区
  • 北京校区
  • 大连校区
  • 广州校区
  • 成都校区
  • 杭州校区
  • 长沙校区
  • 合肥校区
  • 南京校区
  • 上海校区
  • 深圳校区
  • 武汉校区
  • 郑州校区
  • 西安校区
  • 青岛校区
  • 重庆校区
  • 太原校区
  • 沈阳校区