1、spark官网上只是笼统的介绍了一下,Spark Streaming提供了窗口计算,可让您在数据的滑动窗口上应用转换。下图说明了此滑动窗口。
2、对于官网提供的解释来说,我们也不是很深刻的了解窗口计算的原理,下面以示例分析窗口计算的过程。如:每间隔10秒计算前15秒的内容,每次计算出来的结果与上次计算出来的结果,有5秒是重复的(每个batch 5秒)。步骤如下:
1) 存储上一个window的reduce值
2) 计算出上一个window的begin 时间到 重复段的开始时间的reduce 值 =》 oldRDD
3) 重复时间段的值结束时间到当前window的结束时间的值 =》 newRDD
4) 重复时间段的值等于上一个window的值减去oldRDD
我们根据上述步骤一步一步分析一下过程。
①第一次计算,time=10,current window为window1,previous window为空,计算得出RDD1
②第二次计算,time=20,current window为window2,previous window为window1,计算RDD(window2)-RDD1=RDD2
③第三次计算,time=30,current window为window3,previous window为window2,计算RDD(window3)-RDD2=RDD3
④第四次计算,time=40,current window为window4,previous window为window3,计算RDD(window4)-RDD3=RDD4
⑤依次类推......
测试代码:https://github.com/ginkgolu/RunJar