00:00
我们现在已经得到了一个窗口分配器啊,那其实我们也发现了窗口分配器并不能代表我们整个的窗口操作,因为在这里我们只是定义了窗口的类型,只是知道了数据来了之后,他应该分配到哪个窗口里边去,那把数据收集好了之后,到这个窗口结束时间的时候,到底应该执行什么样的统计计算呢?输出什么样的结果呢?最关键的窗口处理逻辑还没有定义出来啊,所以接下来我们一定要再接一步操作,那就是窗口函数,要用它来进行窗口处理逻辑的定义啊,其实我们也知道当前这个window啊,得到的数据类型返回的是一个window stream,那基于window stream还需要再进一步调用一些方法啊,转换处理,做聚合,做计算,然后才能够得到一个data stream,这才是实现了我们完整的转换,所以这样一个数据类型的转换,我们也可以非常直观的用。
01:02
一个图来表示一下,我们看到最核心的就是data stream,那么这样一个data stream呢,我们可以通过K。按键分组得到一个kid stream,那么这个k stream呢?接下来可以直接调用一些简单聚合方法或者一般化的reduce方法进行聚合,得到data three,那我们知道这种聚合呢?那是来一个处理,一个是针对全量数据的一个统计,而如果说我们想要按照某一段数据划分,有借数据去进行统计的话,那就需要开窗了。所以基于p string又可以调点window方法得到一个window stream。那window stream呢,同样接下来可以调一些处理转换聚合的方法,得到data stream啊,绕一圈又回来了,这就是我们说的啊data stream API,当然它的最核心的就是data stream,我们调用的API就是当前的数据流data stream在进行一步一步的转换计算啊,当然了,另外我们也可以不做KBY啊,直接开窗诶,那得到的就是our window stream,它呢,同样也可以调用各种各样的方法,跟我们这边调用的是一样的啊,然后再得到一个data啊,那所以接下来我们就来详细的介绍一下窗口函数到底怎么样去定义。
02:24
那窗口函数如果要是整体来说的话,其实可以分成两大类,一类叫做增量聚合函数,另外一类叫做全窗口函数,诶这是什么含义呢?我们这里可以先做一个说明,那就是我们考虑一下啊,当前这个数据一个一个来了之后。按照我们的定义好的这个规则,窗口分配器把它分发到了不同的桶里边。那按照我们的想法,肯定就是来了之后,这个数据就先进桶啊,每一个数据先进桶,数据收集齐了之后,等到触发计算的时候呢,哎,那你就调用一个逻辑嘛,比方说我们要做一个sum操作。
03:04
那就这个时候把所有的数据拿出来,一个一个做一个叠加输出就可以了,那这种操作比较好理解,这其实就是我们所说的全窗口函数的做法。意思就是说把窗口里面的数据先收集齐,等到窗口结束的时候再去触发计算。得到结果输出到下游,那这个过程其实我们会发现,这相当于是做了一个,做了一个批处理嘛,啊因为我们发现就是数据来的时候啊,我们本来想要的这个流处理是什么呢?是来一个就处理一个,但是其实现在每一个数据来了之后,他并没有处理,就直接攒在这儿了,它真正的处理是等到窗口触发计算的时候,那这不就是一个批处理吗?好,那基于这样的想法,我们自然就能想到,那能不能把这些操作也变成来一个就处理一个,变成一个真正的流处理的样子呢?诶,那是可以的。简单来说呢,就是诶,我们当前不是想做一个sum吗?那就是每来一个数据,我就把当前的,就像我们之前做这个流处理的聚合一样啊,我就直接保存一个状态。
04:11
把当前已经叠加好的结果保存进来,然后接下来其实我连这个数据都可以不存,直接可以扔掉了,我只要保存当前已经聚合好的状态就行了,每来一个新的数据,就在之前聚合好的状态基础上再做一次叠加。哎,那最后窗口到时间的时候怎么办呢?我们直接把聚合好的这个结果拿出来直接输出就可以了,所以这样的话,这看起来就更像我们流处理的一个过程啊,那所以这就是所谓的增量聚合函数,接下来呢,我们就分别来介绍增量聚合函数和全窗口函数。
我来说两句