这个参数和后面的window方法的参数有些关系
def this(conf: SparkConf, batchDuration: Duration)
我们知道,spark的streaming操作其实是一种微批操作。也就是把每个时间段内的数据封装为一个RDD,然后执行相应的算子。这不是本文的讨论内容,稍微提一下就好。
batchDuration这个参数就是收集数据的间隔时间,比如batchDuration为5秒,那么当前Streaming每次就会把最近5秒的数据封装为一个RDD。然后执行我们在DStream中写的那些算子。。
为什么和window的参数由关系呢?
因为window的参数一定要是batchDuration的正整数倍。。比如batchDuration为5秒,那么windowDuration和slideDuration就只能是5秒、10秒、15秒......
def window(windowDuration: Duration, slideDuration: Duration): DStream[T]
窗口范围,表示每次计算数据是最近windowDuration时间范围内所采集的数据。(windowDuration必须是batchDuration的正整数倍)
理解:
streaming每batchDuration毫秒所采集的数据作为一个RDD,然后windowDuration必须是batchDuration的正整数倍。
则N=windowDuration / batchDuration;
那么,windowDuration则表示的是窗口范围是最新的N个RDD包含的所有数据(这N个RDD都union为一个大的RDD)。
窗口滑动范围,每隔slideDuration时间计算一次窗口范围的数据。(windowDuration必须是batchDuration的正整数倍)
(1)理解:
streaming每batchDuration毫秒所采集的数据作为一个RDD,然后slideDuration必须是batchDuration的正整数倍。
则M=slideDuration / batchDuration;
那么,slideDuration则表示每隔M个RDD会计算一次窗口范围的数据。
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,和spark streaming的window几乎一模一样。
不过scala的sliding是基于集合元素的,而spark streaming的window是基于时间范围的(如果把RDD当做集合元素来看,那么这就和sliding很一样了)