当前位置: 首页 / 技术干货 / 正文
Spark Streaming 窗口函数

2022-07-29

窗口 dstream 长度 操作

Spark Streaming 窗口函数

理解窗口的两个关键概念,窗口长度(window length)和滑动间隔(slide interval)。 窗口函数会把原始 DStream 的若干批次的数据合并成为一个新的带窗口的DStream。其中窗口长度即每次生成新 DStream 需合并的原始 DStream 个数。滑动间隔即合并的原始 DStream 的时间间隔。如下图,窗口长度为3,滑动间隔为2,注意这两个值必须是源DStream批处理时间间隔的倍数

 

 

window

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

2 秒生成一个窗口长度为5 秒的Dstreamval 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])

根据KeyWindow 来做Reduce 聚合操作

在上述 reduceByWindow 的基础上增加了Key 维度func 是相同Key 的 value 值的聚合操作函数

数据源的DStream 中的元素格式必须为(k, v) 形式windowLength 和 slideInterval

同样是用于确定一个窗口Dstream 作为数据源numTasks 是一个可选的并发数参数

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

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

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

这个方法比上一个多传入一个函数 invFuncfunc 是 value 值的聚合操作函数在数据流入的时候执行这个操作

invFunc 是在数据流出窗口的范围后执行的操作

2 秒根据Key 聚合一次窗口长度为5DStream 中元素聚合的方式为 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 聚合一次窗口长度为5DStream 中元素

下例中聚合的方式为 value 相加val windowedDstream= pairsDstream.countByValueAndWindow(Seconds(5),Seconds(2))

 

 

好程序员公众号

  • · 剖析行业发展趋势
  • · 汇聚企业项目源码

好程序员开班动态

More+
  • HTML5大前端 <高端班>

    开班时间:2021-04-12(深圳)

    开班盛况

    开班时间:2021-05-17(北京)

    开班盛况
  • 大数据+人工智能 <高端班>

    开班时间:2021-03-22(杭州)

    开班盛况

    开班时间:2021-04-26(北京)

    开班盛况
  • JavaEE分布式开发 <高端班>

    开班时间:2021-05-10(北京)

    开班盛况

    开班时间:2021-02-22(北京)

    开班盛况
  • Python人工智能+数据分析 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2020-09-21(上海)

    开班盛况
  • 云计算开发 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2019-07-22(北京)

    开班盛况
IT培训IT培训
在线咨询
IT培训IT培训
试听
IT培训IT培训
入学教程
IT培训IT培训
立即报名
IT培训

Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号