00:00
哎,我们要给大家讲的就是窗口算子里边的。第二部分应该说这个是更加重要的一部分,因为它决定了窗口的行为,就是你到底要怎么计算我们真正的业务逻辑,其实其实核心在这儿啊,因为前边这个窗口分配器啊,它只是代表窗口怎么开,窗口长什么样,一个滚动窗口,或者一个会话窗口,滚动技术窗口,滑动技术窗口,它只是代表我要收集哪些数,那你把这个数收集起来要干啥呢?啊,啥都没说啊,所以下一步一定要跟着一个。进一步要做什么的操作定义,这个就叫做窗口函数,那这里面给大家画一个流之间的转换图,因为之前我们也已经说到了data stream上直接KBY之后得到的是一个k stream,然后呢k stream,如果点window。定义窗口分配器的话,大家注意这里平常我做这个转换计算的时候,之前大家都记得,一般一个转换计算完了之后,调用完了之后,应该返回的就是一个single output stream operator是一个算子,然后这个算子它又继承data stream,所以我们就说,诶,这是一个算子定义出来了,对应着我们后面要执行的一个任务,那现在呢?
01:18
哎,现在大家发现了KBY之后,这个k stream不是一个算子,所以K不是单独的一个任务,而后边的window呢,Window源码里面得到的是一个window stream。它什么都不是,大家看一下,就是当时我们开窗window得到的window stream。他甚至连都不是。它就是单独定义的这么一个类,诶,所以你在这个window stream里边,假如说直接就认为我们当前一个开窗就完成了一步操作的话,这显然不对啊,啊它它还不是data stream呢,你这怎么接下来基于这个东西再去做转换呢,你能一个Windows stream再去map吗?显然不能。
02:01
所以一个封口算子。必须至少包含两部分内容,一个就是窗口分配器,就是点window这样一个操作。然后另外一步操作呢,那就是所谓的这一个窗口函数啊,那当然了,这里边这个窗口函数最后会变成什么呢?这个箭头画的有点不对啊,窗口函数它是应该直接变成什么呢?得到的应该是最后的data stream,它不会再退回到这个k stream啊,它会直接跳转回data stream。这里可以在源码里边看得非常清楚。Window stream里边有一些方法,大家看,有aggregate啊,还有这个apply,这个apply里边就传的是一个window function窗口函数,然后大家看最后得到的就是什么呢?就是一个single output stream operator,大家知道它是继承自data stream啊,所以你说它是data stream,这个是对的,然后k stream也是继承自data stream,但是你如果说当前你得到这个算子是一个k stream,这个其实是不太对的啊,所以这个应该是直接连到data stream这里啊,放到这来。
03:08
所以通过这张图,大家就可以看到当前我们总结到的所有的这个硫的转换方式了,硫怎么转换呢?啊,那流其实就是一个data stream,如果说啊,这里还少了一条路径啊,如果说你就是一些简单转换算子map filter flat map的话,哎,那可能它只是数据的形式,数据类型,数据的个数发生一些变化,它还是data three就在这转圈,然后呢,哎,如果你做了KBY,那么它变成了一个k three。然后基于k stream可以直接做聚合啊,简单聚合啊,Some max,然后还有一更一般化的reduce,然后就得到data stream,或者还可以怎么样呢?还可以基于它开窗再去得到一个window stream,那么window stream做了这个转换之后,又得到了data stream,所以绕来绕去最终走一圈还是data three,所以我们这一套就叫data three,没PI。
04:08
当然了,除了这种方法之外,之前我们不是说过窗口的创建可以K也可以不K吗?啊,所以我们可以直接基于data stream去开窗。点window,那这个得到的什么呢?啊,其实不是点window啊,这是点window or,大家还记得吧,点window or得到的是一个or window string啊,这个跟它就差一个or这个单词啊,其实差不多的,用法也完全一样,可以说完全一样啊,啊那区别就在于我们当时说window or的时候,因为你是放在一个窗口里边统计嘛,所有数据放在一个窗口里边统计,那默认所有数据分发到同一个分区,并行度变一了。啊,所以这个其实对性能是一个,呃,是一个很大的制约啊,一般不推荐大家这样去做啊,当然你的需求如果必须这么干的话,那这么干也行啊,但是一般不推荐,所以接下来这个all window stream也可以调用一堆方法啊,然后再去做一个窗口函数的处理,得到一个data stream。
05:08
这个跟window用法是完全一样的啊,所以后面的话,如果我们不做特别说明啊,我们主要考虑的就是KBY之后,然后开窗得到window stream,再回到data stream这一套,这个our window stream我们就不单独再去做讲解了。就是关于窗口函数的一个整体介绍。
我来说两句