00:00
现在我们把这个window的操作呢给大家过一下啊呃,Window的操作当中他说了可以设置窗口的大小和滑动窗口的间隔,来动态的获取当前流数据当中允许的状态。所有基于窗口的操作都需要两个参数,分别是窗口的时长以及滑动的步长。那么这里的窗口的时长呢,就是那个窗口的范围啊,就是把多少个采集周期给它包进去,就是这个感觉啊,那么这个滑动的不长呢,它其实呢,表示的就是我们滑动的幅度啊,你那个窗口呢,它这个滑动的幅度是多少,是一个采集周期,一个采周期的还是两个两个三个三个的采集周期,对吧,就一个滑动的概念啊,这个理解一下。然后呢,这个窗口时长呢,是计算内容的时间范围,第二个滑动不长呢,叫隔多久触发一次计算,记住啊,同学们,在我们的窗口当中,每一次的滑动它会触发一次计算,所以呢,我们默认情况下,其实本身窗口就有这个概念,它是什么呢?一个窗口一个窗口的,但是如果你改变它的步长的话,它就是按照你指定的步长呢,去进行我们的计算,哎,就这么个概念。
01:10
呃,这边呢说了啊,注意这两者都必须为采集周期大小的整数倍,你这个是绝对不能跨越采集周期的,比方说三秒钟,你非得跟我说五秒,那就不行,对不对,那是不可以的啊,所以呢,我们这里呢,有我们的这个概念啊,这个千万记住了,这个里用红色字体给大家标明了,非常的重要,然后呢,我们这里呢,这个Windows的方法呀,除了我们之前给大家讲的这个window啊,比较简单对吧,还有一些别的方法啊,这里面呢,叫做count by window,就是窗口当中元素的数量啊,还有呢,是我们这个reduce by,在窗口当中做我们的聚合,所以呢,它会把聚合的功能以及我们窗口的范围,还有我们滑动的幅度呢给它设定上,其实啊,就等同于把咱们之前的这个window和这个reduce by key呢给它,诶关联在一起了。那好,那我们再来往下看,下面还有一个叫做reduce by key and window啊,这个其实跟我们刚才那个也大同小异,只不过呢,我们前面这个是没有那个by key的概念,而这里呢,是有一个key的概念的,对吧?然后接下来还有一个叫reduce by key and,这个就比较特殊,为什么说比较特殊呢?其实跟上面是一样的,但是你会发现它多了一个啊,多了一个我们的函数,这里呢,我们换一个颜色来标识一下啊来。
02:25
我们上面这个reduce by key呢,其实是没有这个参数吧,那这里就多了一个参数,那这是为什么呢?这个给大家解释一下啊,就是它里面有两个我们的函数,以及窗口的大小和这个叫做滑动的幅度,为什么需要两个函数呢?是这么一个情况,是因为啊,当我们的这个窗口当中啊,有重复数据的时候,大家看一下当我们这么去滑动的时候,是不是有重复数据啊,那如果咱们假设我们重复数据太多的情况下,然后你重复计算,这样的话是不是影响性能啊?哎,咱们举个例子啊,比方说来。咱们现在呢,是三个采集周期作为一个窗口,然后呢,我们一个采集周期去滑动,同学们想想怎么了,你会发现是不是有两个采集周期的数据被重复了,它就得重复计算吗?这样的话性能不高,所以它怎么办?它可以这样它可以呢?来大家看一下,看不不到我们的效果,你现在滑动的时候,那么是不是等同于在之前的计算结果的基础之上,把我们的这个数据给它删除了,然后把下一个采集周期的数据给它加进来了,所以它又有增加又有减少的操作,它的增加操作其实就是我们的第一个参数,那么减少的参数就是它把哪些数据我不要了,来把哪些数据增加上,这样的话是为了避免我们的那个重复数据,所以啊,我们什么情况会用它呢?我们这里给大家简单说一下啊来。
03:52
把这个呢,我们关掉,然后呢,我们拷贝一下啊,来这里我们写上一个一,然后点击OK啊,咱们放过来,放过来以后同学们看我这里呢,就不这么写了,然后呢,我把这个文字性的描述呢,我们先去掉,去掉以后这里我们回个行啊,咱们回个行,然后呢,我们写上咱们叫做reduce by key啊,And window OK,放这放这里以后啊,咱们这里呢,稍微的注意一下,首先它需要传四个参数,呃,第一个参数就是我们的聚合方式,下划线加下划线,那么第二个呢,就诶不对,我们这个写全了吧,看着可能不太舒服啊来我们写上X,然后写上一个Y,然后写上一个它OK,那么我们说过了,那就是X加Y,为什么呢?这是我们增加的数据,但是呢,我们要把划过去的数据给它减少,所以呢,我们写上啊,咱们这儿来写个逗号吧。
04:41
然后呢,写上一个X啊,一个int,然后写上个Y啊,写上一个int OK,然后呢,给它写上一个划括号,咱们叫X减Y,诶咱们这么写,你这么写了以后,它表示的含义呢,就是诶这个是把增加的数据放过来,这个是把跳过去的减少的数据放过来,所以啊是这么一个概念,好那这个呢,我们就直接拿过来了,放到这里,这个咱们就不要了啊,所以它有这么一个操作,好那我们这里呢,给大家来看一看吧,这个我想想怎么看呢,我们说了窗口范围啊,比方说我们是嗯九秒钟,九秒钟的话,然后呢,有六秒钟是重复的,对不对,因为六秒钟去滑了,我看啊这个咱们三秒吧,三秒你滑动三秒的话,那么就有六秒钟是重复的嘛,那么这样的话就有重复数据了,对不对,所以呢,我们一块儿来看一看效果。
05:30
呃,把这个呢,我们先停一下,把这个停一下,把这个呢,咱们都给它停一下好了,停完了之后,接下来我们给大家演示一下,嗯,好。嗯,接下来我们就开始要运行了,同学们来。所以啊,它里面其实说的简单点,就是把我们的新增的数据给它加进来啊,把这个过去的数据呢,给它减掉就可以了,好,那我们现在呢,稍微的等一下,我们看一看啊,咱们这里呢,来。当它打印时间戳的时候,我们先,诶大咱们这里来,它这里面有一个错误,这个错误什么呢?叫checkpoint direct has not been set,呃,什么意思呢?就是说我们没有设定检查点的路径,哎,为什么?
06:13
同学们,当出现这个错误的时候,你们觉得是为什么?诶对,就是因为什么呀,就是因为咱们要保存它的状态,为什么呢?因为这些数据我们不能删掉啊,它不能够什么呢,重新计算它的时间保留下来对不对,所以啊,在咱们的这个位置呢,咱们同学看看啊,在咱们这里呢,来SC点我们叫做checkpoint,给他来一个我们的CP就可以了,你这么写完了以后你再来做就可以了,所以啊,这个才称之为叫有状态计算,其实咱们之前的那个window啊,其实是没有状态了,它只不过把多个我们的那个采集周期的数据的放在内存当中,或者放到存储文件当中,所以啊,这是有点区别的啊。好,我们来看一看,OK,现在开始了,那我们现在来啊,来来来,我写的慢一些,写的慢一些,看看它的效果。
07:05
咱们观察一下,这现在呢,是我们的A8,然后呢,它是我们的A11 a11因为什么呢?它的跨越两次嘛,然后呢,大家有没有发现我们的11减八是不是就正好是三了,对不对,哎,就是这样的,所以呢,也就意味着它其实是底层有个相减的操作,这样的话可以提升效率,所以我们的这个reduce by key,咱们在这里说一下啊,来当我们的窗口范围比较大,比较大,但是呢,但是我们的滑动啊,滑动幅度。比较小,比较小,那么它可以采用采用我们叫做什么呢?叫做增加数据啊和删除数据的方式,删除数据的方式,然后呢,无需咱们叫无需重复计算。啊,你否则你大量的数据重复计算的话,就会影响性能对不对,所以咱们的目的是为了提升啊,咱们的性能就是这个意思啊,那么在课件当中呢,咱们往下看啊,它这里面就有加和减的概念,然后呢,我们接着呢,往下特别有一张图形,这个图形呢,可能其实看的并不一定很明白,为什么呢?就是因为它会把每个数据呢做一个关联,那对于咱们来讲呢,其实就是新增再去减少啊,就是这么一个操作啊好了,这里呢,我们说一下就可以了,这是我们对窗口的一个补充吧,啊同学们下来呢,可以自己试一试啊,因为这些方法呢,其实理解上并不难啊,只要把这个窗口的概念,它的那个范围,它的那个滑动的幅度都搞明白,那其实用起来相对来说还是比较简单的啊。
我来说两句