spark streaming的window窗口操作

一、StreamingContext时batchDuration参数

这个参数和后面的window方法的参数有些关系

def this(conf: SparkConf, batchDuration: Duration)

1、batchDuration

我们知道,spark的streaming操作其实是一种微批操作。也就是把每个时间段内的数据封装为一个RDD,然后执行相应的算子。这不是本文的讨论内容,稍微提一下就好。

batchDuration这个参数就是收集数据的间隔时间,比如batchDuration为5秒,那么当前Streaming每次就会把最近5秒的数据封装为一个RDD。然后执行我们在DStream中写的那些算子。。

为什么和window的参数由关系呢?

因为window的参数一定要是batchDuration的正整数倍。。比如batchDuration为5秒,那么windowDuration和slideDuration就只能是5秒、10秒、15秒......

二、DStream的window方法:

def window(windowDuration: Duration, slideDuration: Duration): DStream[T]

1、windowDuration

窗口范围,表示每次计算数据是最近windowDuration时间范围内所采集的数据。(windowDuration必须是batchDuration的正整数倍)

理解:

streaming每batchDuration毫秒所采集的数据作为一个RDD,然后windowDuration必须是batchDuration的正整数倍。

则N=windowDuration / batchDuration;

那么,windowDuration则表示的是窗口范围是最新的N个RDD包含的所有数据(这N个RDD都union为一个大的RDD)。

2、slideDuration

窗口滑动范围,每隔slideDuration时间计算一次窗口范围的数据。(windowDuration必须是batchDuration的正整数倍)

(1)理解:

streaming每batchDuration毫秒所采集的数据作为一个RDD,然后slideDuration必须是batchDuration的正整数倍。

则M=slideDuration / batchDuration;

那么,slideDuration则表示每隔M个RDD会计算一次窗口范围的数据。

3、举例

假设batchDuration为5秒,slideDuration为15秒,windowDuration为25秒。

streaming每5秒采集的数据会生成一个RDD。

streaming每15秒会执行一次计算。即每3个RDD会执行一次计算。

streaming每次计算会计算最新的25秒内所采集的数据。即每次计算最新的5个RDD在union之后的大RDD。

综上所述:streaming每15秒会计算最新的25秒所采集的数据(streaming每3个RDD会计算最新的5个RDD在union后的大RDD)

其实我们不设置任何窗口时,window默认就是slideDuration为5秒,windowDuration也是5秒。

三、scala集合的sliding

scala集合本身有一个sliding,和spark streaming的window几乎一模一样。

不过scala的sliding是基于集合元素的,而spark streaming的window是基于时间范围的(如果把RDD当做集合元素来看,那么这就和sliding很一样了)

发布了144 篇原创文章 · 获赞 36 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/qq_36951116/article/details/103709098
今日推荐