00:00
接下来我们给大家讲一下咱们的窗口操作啊,叫window operations,那么窗口操作是什么意思呢?这个咱们之前给大家讲那个scla的时候,是不是学过一个叫划窗的一个方法呀,叫sliding对不对,它可以把集合的一部分数据当成一个整体来做操作,然后呢,可以不断的迭代,让那个我们的窗口呢发生滑动,所以我们把那个sledding呢称之为叫滑窗是可以的啊,那么我们这边呢,有一个叫窗口呢,跟那个感觉很像,那这个我们来理解一下吧,同学们来。我现在呢,把这个呢,我们拷贝啊,咱们复制一下来复制,复制以后呢,我们往下来放过来啊,放过来呃,放到咱们当前的这个位置啊,那现在我们想体现出一个什么概念呢?就是说我们可能啊,对于我们来讲,我们的数据在源源不断的过来,而且我们这里会有多个采集周期,对吧?诶多个采集周期,但有的时候这个采集周期啊,它的时间太短了,我希望呢,把多个采集周期当成个整体的时候,这个时候它就有个范围,这个范围呢,我们就统称为叫窗口啊,因为窗口是有个大小的嘛,那么大小不就是一种范围嘛,对不对,那比方说我想把三个采集周期当成一个整体,那么大家看默认情况下是一个采集周期就是一个整体,现在我干嘛呢?我想把三个采集周期啊当成一个整体,就是我要统计呢,就直接统计这么多的数据,当一个采集周期的数据过来的时候啊,我并不会马上触发它的计算,那我什么。
01:35
出发呢,是当我们的这个采集周期啊,达到了我们的一个要求,比方说你不说了嘛,三个采集周期当成一个整体吗?那么第一个采集周期我先不管它,第二采集周期不管它,当我到了第三个采集周期的时候,我再去进行统计汇总,那么这样的话呢,我们就可以实现我们的一个功能,就是把多个采集周期当成一个整体,诶就是这个意思啊,所以这个现在是我们想做的一件事情啊,咱们想做的呢,其实就是这样的一件事情,把多个采集周期当整体,可是呀,还有个问题,因为你数据是源源不断的过来,那就意味着你不可能只统计这三个吧,你随着时间的推移,是不是还得统计下面的三个,再统计下面的三个,所以你会发现这个所谓的窗口呢,它也有个滑动的概念,对不对,所以咱们的Spark streaming当中的这个window,它其实有滑动的概念,我们也称之为叫窗。
02:35
可以把我刚才画的这个图呢,给大家去体会一下啊,就是首先啊,这个窗口呢,可能啊,在我们数据之外啊,在数据之外对不对,也就是这样的,但是呢,慢慢的会滑动到咱们的这个位置,记住啊,它不是一次性的就拉的很长,它不可能啊,因为你这个窗口是有范围的嘛,你这个范围不可能说一下子就把这全部包进去,这个做不到,所以呢,他应该有一个渐进的过程,所谓的渐进呢,就是诶诶慢慢进来。
03:02
进来以后干嘛呢?诶大家看看我们拉长在这儿啊,然后呢再来诶到这儿是吧,就是有个渐进的一个过程,这样的话,我们的数据应该是这个样子的,那好,那我们现在准备要演示的话,你如何来验证它呢?同学们想想我们我们就以这个数据为例啊,咱们比方说最开始的时候,我们的数据统计的话,有这个嗨吗?没有,但是呢,当他进来的时候,大家想想本身的这个嗨啊,在最开始时候是不是零啊,他最开始的时候是零对不对?然后呢,诶,你在挪动的时候,它就变成了什么,变成了HELLO1了,没问题吧,同学们,诶就是这样啊,然后呢,干嘛呢,继续,然后呢,当往下走的时候,大家想一想,是不是这时候就应该是我们的HELLO3了,所以呢,我们的hello在这个位置呢,就统计出了我们的HELLO3,然后呢,写上一个我们的三,然后呢,当我们再往下移动的时候,再用乘啊往下移动的时候没有吧,那么你往下移移动以后是不是剩下HELLO2呢?所以它就会剩下什么啊,我们的嗨二。
04:06
那么然后再移动,再移动的话,大家想一想是不是就没有嗨了,嗨,是不是又变成零了,就没有了,所以呢,大家想一想,你会发现呢,我们现在这个窗口在滑动的过程当中,它的数据其实是有一个规律的,所谓的规律呢,就是从零到一,再到三,再到二,然后再到零,它有一个曲线在里面,对不对?所以啊,我们通过刚才的演示,你应该能够把这个看明白,那好,我们就来演示演示,看看是不是这个效果啊,把这个呢关掉。关掉以后呢,我们来给它拷贝,咱们写上一个叫做零七啊,咱们叫零,这个地方改成我们叫做window啊window好拿过来咱们点,诶我觉得还是叫零六是不是好一些啊啊,咱们叫零六啊零六,然后呢,我们这个叫state吧,它跟状态也有一定的关系啊,咱们叫做window。好点击OK,点击OK之后,把这个呢,我们换一换啊,然后呢,我们再来这个咱们就不要了。
05:03
不要了之后呢,我们写上咱们叫Les啊,咱们写上点儿点了以后啊,点我们就叫map啊,咱们就叫map,括号下划线逗号一,然后呢,我们写上叫做什么呢?我们叫做word,那咱们叫做to one OK,然后接下来干嘛呢?我们现在先别着急去reduce back key,我们现在呢,先做一个我们的窗口的一个操作,咱们叫做one,然后点我们叫做什么呢?咱们叫做window。这个window是什么意思,就是把范围定义好,那这个范围它怎么来定义呢?我们前面讲了三个采集周期,所以这边也有个周期的概念,那这个叫做什么呢?叫duration,那么这个周期呢,我就写上,咱们应该什么呢?咱们叫做second啊来咱们叫second,那这个second我到底写多少呢?对吧,就是我这个我们的这个东西啊,到底写多少会合适一些,首先咱们回过头来。
06:02
同学们想想我的这个采集周期,我能是四秒吗?你这三秒,我四秒,那你要四秒的话,是不是就等于在这儿了,对不对?那么这样的话就有问题了,哪些数据你要,哪些数据你不要,它会跨越两个采集周期,但是又不是完整的两个采集周期,它有些数据我要,有些数据我是不要的,对不对?那么在这种情况下,我们该怎么办呢?我们说这是不可能的,对于我们来讲,在这种情况下,我们想要做的事情是什么呀?就应该是完整的采集周期,你绝对不能够,哎,是不完整的。所以啊,我们这里就说一下来咱们的这个窗口的这个范围啊来嗯。咱们写上咱们这个窗口的这个范围啊,这个范围它应该是我们的采集周期的整数倍,哎,应该是这样的一个整数倍的一个概念啊,那这里不是三秒吗?那我这就可以改一改了啊,比方说六秒,你六秒意味着什么?它意味着你把两个采集周期当成一个整体,是不是这样的呀?OK,然后点一下咱们叫VAR回车,回车以后这就叫window DS了啊OK,就是它好写完之后那就简单了呀,你这个窗口的范围有了,那我再去做聚合不就完了吗?我们叫做reduce by key,然后下划线加下划线,最后得到一个我们的结果叫word to count,放过来,放过来以后拷贝,拷贝之后呢,我们点我们叫做print,嗯,可以了,我现在呢,就增加了一个window啊,这个window就是把我们多个采集周期当成一个整体。
07:44
当它的这个采集周期已经满足的情况下,可以开始触发它的计算,所以呢,我们这里来啊,这是我们的九,哎四个九,咱们回车,回车以后这个不要了,行,那么启动了我们的服务之后,我们现在呢,给它来运行,运行之后我们来看结果啊,看结果,那么这个结果当中,对于我们来讲,我们现在想要看的就是它的这个数据,它的这个数据对于我们来讲的话,我们就要看一看它的这个窗口的范围是不是这个概念啊,首先不说别的。
08:16
同学们看看啊,呃,我们现在的这个位置呀,同学们看啊,我们现在是在这儿,那好,我们现在呢,操作一下,嗯。把这个拿过来,我们写上aaaaaaaaaaa,好,我先写完了,是不是有点太快了,我们来看看啊,首先A2,然后呢,A41A9,好,同学们看有没有发现那个曲线,曲线就是由少变多,再变多,再变少变没有吧,对不对,所以说你看这个曲线跟咱们刚才说的是完全一样的,对不对,同学们就这个意思啊,所以这就是我们所谓的窗口操作,但是呀,还有个问题,你这个窗口随着时间的推移,它会移动对不对?那么这个移动我们默认情况下应该是一个采集周期,一个采集周期移动对不对,应该是这样的,你看我们说过了,当你移动的时候,大家看一下啊,咱们刚我们已经没有了,那个,刚才呢,其实那个时间差还是三秒钟,为什么呢?因为它是一个采集,一个采集周期的移动的,所以我们说一下啊,我们的窗口,咱们的窗口它是可以滑动的啊滑动的。
09:25
但是呢,我们默认情况下,默认情况下它是一个采集周期啊,进行滑动。但在某些情况下,我们这个就有问题了,什么情况呢?你有重复数据啊,同学们大家看一下咱们这里的话,这几个数据在我们下一回移动的时候,是不是就重复数据啊,还就这样,你看这个重复了,那所以等于重复计算呢,所以在某些情况下,我可能不想让它重复计算,那该怎么办?那这个时候我们就可以让它的采集周期,或者说它滑动的幅度更大一些。所以我们自己说一下啊来,呃,我们说这样的话啊,来这样的话啊,可能啊,可能会出现我们叫重复数据啊,重复数据的计算,那么为了避免啊,为了避免,嗯,咱们的避免这种情况,我们可以避免这种情况,我们可以呢来。
10:19
改变或者叫做呢,就要改变吧,改变我们叫滑动的幅度啊幅度,这个滑动的幅度呢,我们就称之为叫不长,哎,咱们叫不长,那这个怎么做呢?大家看一下,在我们的window的第二个参数当中,有一个什么呢?叫做slide duration啊就是它了,那这个东西就是滑动的周期,那咱们就可以这样呢,诶咱们叫做六,诶放过来,你这么写了以后,那么我们现在来看效果啊,来再给它重新启动,重新启动以后我们给它来运行。运行以后看一看咱们的这个效果啊,因为我们现在滑动的方式呢,有点变化了,它这里面就不会有重复数据了嘛,首先我们来看一看它的打印时间戳。
11:04
嗯,这个打印时间戳,对于咱们大家来讲的话,我来确认一下。看看哎,这是二,然后接着往下同学看一下。你会发现下一回再打印时间戳是不是8000,他们中间差了六秒吧,就说明当它滑动到六秒之后的时候,再去做计算,也就这么一个过程啊,那好我们来给大家来演示一下来咱们aaaaaaaa诶我我稍微慢一些啊。好了,我们来确认一下这周是九啊看看诶好像2468,诶不对,因为我们现在就在一个窗口当中,所以我这个再慢点啊,咱们写个B。嗯,好了,大家学呢,我现在写个B4,然后呢,再往下,往下是不是B5啊,那么这时候我来观察一下123456789,你会发现他们中间是没有重复的数据,对不对?诶这就是我们要给大家演示的效果,当你的滑动不长,诶,我们说要大于或者说等于咱们的这个窗口范围的话,它就没有重复数据,对吧?诶,这就是一个最基本的窗口操作,好吧,同学们。
我来说两句