00:00
接下来我们已经知道了S这一步数据源怎么样去读取了,那接下来当然读性数据来之后,我们要做转换了啊,这一部分我们就来讲这个transform transform这一部分呢,其实整体来讲分成了几个,又可以分成几部分,大家可以看到啊,我们这里边transform算子很多,那整体来分的,前面这个比较简单,Map flat map filter,对吧,那这些其实我们一般情况下会把它叫做简单转换算子啊,就是这一部分啊,上面大家看到的这三个三个一组,我们把它叫做简单的转换算子啊,然后也也就是言下之意啊,下边的就没那么简单了。简单转换,那那从下边开始,首先讲了一个K外啊,之前我们说这个K外不是不算一个具体的操作,算一个转转换算子吗?啊,但是它在这里边,我们的data streamam API里边地位很重要,为什么呢?因为后面大家会看到我们之前讲的这个map reduce,对吧,大家比较熟悉的这个map reduce操作在这个link里边,如果你想要去做reduce的话。
01:10
前提是什么呢?就必须要K败,必须要对它做分组之后才能做reduce操作,所以说这里面的K就非常重要,对吧?呃,尽管我们认为它是类似于一个按照哈西code重分区的一个数据转换数据,数据传输的这样一个定义的操作,但是呢,你只有做了它之后,后边我们才能够去做聚合啊,所以在它之后呢,我们接下来就把这个K啊。结合起来,然后后边这个讲一些所谓的滚动聚合算子做聚合,或者还有更加一般化的这个聚合,那就是reduce啊,所以这一类算子呢,有时候会给大家直接就叫做,比方说这个叫做聚合算子对吧?啊这是这是一种叫法啊,那另外还有一种叫法是管它叫做键控流转换算子啊,什么叫键控流呢?啊,这个是一个比较生硬的翻译啊,啊那主要就是因为K外之后,它本身的这个流的类型也要做一个转换,就是我们本来是data stream对吧?啊,那KY之后它会得到一个K的stream,这个后面我们。
02:18
专门讲KBY的时候,还会专门给大家再说一下这个概念啊,得到一个这个K的stream,所以呢,呃,有时候我们就说这个K的翻译过来叫做键控流对吧?用一个键来控制的流叫做键控流,所以接下来的这些聚合操作都必须K派之后才能做嘛,所以我们就管它叫做键控流转换算子啊,啊,这个大家就是一个概念而已啊,大家不用太叫真,那剩下还是三个一组,下边的呢,就又是另外的一类了,这是什么呢?Split select大家知道,这就是切分对吧,切分之后拣选,所以这是一个分流操作。然后后面呢,Connect Co map,然后UN,一看这个名字大家都知道,Connect连接嘛,UN联合嘛,这些都是合流操作,所以下边的这一部分呢,一般情况我们把它叫做多流转换算子。
03:13
啊,所以往往有时候就有这样的一个说法啊,就是把这个所有data stream API我们分成这么几类,简单的转换算子,监控流的转换算子,还有多流的转换算子,对吧?啊,我们平常所所说的这个reduce聚合操作,都是在中间这一块,监控流就K之后做的操作。那接下来我们就一个一个给大家讲,呃,首先是这个简单转换算子,其实这个就不用多说了啊,大家一看就知道对吧,这个定义也非常的明确,之前我们在别的一些架构或者说其他的一些应用场景里边经常用到,呃,比方说这个map,大家看这个所谓的简单转换算子,其实有一个共同特点是什么呢?它都是one to one操作对吧,就是我们前面说的类似于Spark里边的窄一类啊,就是这里边,你看我们做这个mapb操作的时候,就是来一个元素定义它的一个转换规则,一对一,然后输出一个对吧,来一个方块输出一个圆圈,来一个方块输出一个圆圈,比如说我们定义一个哎,乘以二的操作,对吧,非常简单的一个拉姆达表达式,这就是。
04:15
Map map转换非常简单,其实前面我们在代码里面已经用过了,然后后面还有一个就是Fla map flama大家知道它其实就是在这个SKY里边啊,如果说我们直接针对一个skyla的集合类型去调用它的,呃,Fla map方法的话,它其实相当于是做了一个一个map之后,然后再去做了一个Fla,对吧,一个扁平化的操作啊,所以说我们直观理解的话,Fla map就相当于是把把一个这个当前的元素可能还是一个集合类型。我们的做法呢,是要把这个集合类型打散,然后再变成一个打散之后扁平化之后得到一个新的一个集合类型的结果,对吧?啊,所以这个比较常见的应用,你比方说像我们这里边做一个,呃,这个传的这个函数啊,咱们的表达式大家看是每一个元素呢,变成一个list的ii,那是什么意思呢?那其实就是说这里边本身我里边的元素是123对吧?啊,那123每一个元素都变成II2个元素的一个例子的集合,然后再打散,那最后其实得到就是什么?就112233对吧?啊这个其实是很容易理解的一个过程,或者还有一个常见的应用,那就是我们做word烫的时候,一组这个呃,字符串空格分割。
05:33
呃,所有的词如果我们要要想打散提取出来的话,那不就是做一个sweet,按照空格分割,然后得到的就是这么一组abcd吗?啊,这个大家之前在word的时候也都已经用过了啊。另外还有就是filter filter就更简单了啊,给一个拉姆达表达式,这个拉姆达表达式应该返回一个布尔类型的结果,对吧?用这个布尔类型是否为真为处来判断当前的元素是否保留,是否是转换之后的那个那个呃,集合里边还有这个元素,那对于我们当前这个而言,它是一个数据流嘛,那就相当于是什么?就是你如果要是比方说我们现在filter,我就要白色的,那就是符合白色这个条件,返回为处,那我接下来就继续往下游传传递,对吧?大家想到就是相当于有一个底层有一个collect啊,把它收集起来,然后朝下游发送,如果你不符合为false,不好意思,你就别别别走了,对吧,直接过滤掉,拦住了,这是filter。
06:32
这些简单转换算子呢,呃,就是确实是太简单,所以说我们就就给大家大概的回忆一下啊,我们就不在代码里面试了,后边我们在写代码的时候都会用到,用到的时候大家再再测试就可以了。
我来说两句