00:00
好了,同学们,我们刚才呢,就是把这个aggg by key啊,嗯,通过代码的方式呢,把一个简单的需求呢,咱们做了一下,就是我们的分区内相同的K取我们的最大值,然后呢,我们分区间啊,相同的K给它相加啊,最后得到个结果啊,但是光写代码呢,大家可能不是很理解,对吧?那我们接下来呢,用画图的方式给大家呢,把这个再来说一下,让大家再理解一下,咱们慢点来,不着急啊呃,首先咱们的第一个啊翻过来,嗯。呃,这个呢,咱们表示的是什么呢?我们的分区啊,咱们不是两个分区吗?诶就是这样的啊好,那么两个分区的话,我觉得可以把数据呢,稍微的是放,嗯,放稍微多一些吧,因为放太少的话,可能大家体会不出来,嗯,比方说我这里写上一个A啊,咱们写上一个A逗号一,对吧,好,然后呢,再来我们写上一个A,我们的逗号二啊就是这样的,那行了,然后呢,我们再来一个是吧,我们写一个A逗号三,哎,这样的话会不会好一些呢?嗯,就是这样啊好,那么诶我觉得我看看啊,这个我觉得别叫A逗号三了,咱比方说就叫B吧,哎,咱们就叫B啊是这样的,那行,那这个颜色呢,咱们给它标识一下啊,比方说红色啊,OK,然后下面的这个分区呢,我们也用红色来标示啊,OK。
01:19
翻过来之后,那么这个呢,我们稍微的有点变化了啊,有点变化,这个呢,我们是什么呢?是这样的,咱们是这个B啊,咱们叫B,然后呢,写上一个我们的四吧,哎,咱们这么写啊,然后呢,这边写上一个我们的B啊,写成一个我们的五,然后这边写上一个A啊,咱们的六,哎,咱们这么写,所以数据上跟咱们刚才演示的稍微有点差别啊,这个呢,我们来看一看,嗯。呃,首先我们的第一个啊,咱们想要干嘛呢?在分区内,就是我们当前的分区内里面的数据啊,想把它相同的K,它要做什么?诶,我们最大值的判断啊,可是我们说过了,当你循环迭代的时候,你第一个碰见的数据是不是应该是它呀。
02:06
你第一个碰见的数据是它,那么它跟谁来比较最大呢?对不对?为什么说我们说诶老师那一不就最大吗?可是你要记住啊,你的这个最大它是分区内的计算规则,那么如果这个值你不参与到计算当中,你是没有办法判断它是不是最大的,对吧?那你可能还认为它是求和呢,所以在这种情况下,这个A1它没有办法进行我们的什么我们的分区内的那个计算,所以这是不对的,那我该怎么办?我先想办法给它一个初始值,就叫zero入value,所以呢,大家看一下我在这个位置啊,咱们在这个位置我给它一个初始值,所以拿过来,拿过来以后这个A啊,我们给他一个零,记住啊,这个零就是我们刚才我们在代码当中,我们给他的那个初始值零,为什么呢?相同的T这个零就是那个初始值了,所以这个颜色我们稍微的咱们换一换啊,换一个我们的黄色好了,那么。
03:06
那你这么换完以后,大家看一下这个时候我们的箭头呢,诶,它指向咱们的这个位置啊,好放过来,那么放过来以后,那我们这时候是不是该要进行分区内的计算了,所以我们拷贝啊,咱们来把这个呢给它来,嗯。然后呢,把这个呢,我们复制,复制以后我们放到这边这个地方,就是我们的分区内啊,它的计算规则了,所以放过来啊,咱们写上叫分区内,嗯,咱们叫分区内咱们的计算啊,那这个呢,给它稍微变得大一些,嗯,好,那这个呢,复制一下这个咱们叫做什么呢?我们叫做初始值啊,把这个来初始值。好了,那么现在呢,我们开始看分区内该如何计算了,分区内计算的话,同学们看看是不是首先初始值过来了,你初始值过来的话,你的第一个值是不是也就过来了,诶过来了,过来以后我们说过了是两个value来取我们的什么,我们的最大值,那最大值明显的零和一比较,那么肯定是一胜出吧,诶,所以呢,我们的箭头就指向它。
04:17
啊,这个我们的它就胜出了,诶就是这个意思啊,好,那么行,第一个数据我们的分区呢,已经完成了,该我们第二个了,第二个的话是不是A2啊,那么这个A2呢,它要想做计算没有任何问题,为什么呢?因为之前有个值了,所以它和我们之前的这个值就可以做两两计算了吧,它如果做两两计算的话,那么一和二明显是二的值更大一些,对不对,所以我们的这个值它就胜出了,所以来我们的A2它就胜出了啊,然后箭头呢,我们拿过来放到这边就可以了,好,我们来再接着往下看,往下看以后是不是该B3了,这个B3呢,发现了一个问题,什么呢?这个K之前没出现过,那你看这个A出现过,这个B没有出现过怎么办?诶也得给它来一个我们的初始值,所以呢,有一个叫B0啊,这个咱们叫做B0,那这个B0呢,它这个地方我们来给它一个黄色啊,一个初始值,所以这个B0它就得跟。
05:17
我们的这个AB3,诶进行我们的运算了,那么这个运算你会发现呢,在后续的过程当中没有这个B了,对不对,所以零和三比较,那么就是三大,而这个三其实就是最后一个,那么就直接划过来就完事了,所以复制啊,复制以后大家看到我们的分区内,它里面的计算就算是完成了,那么A2B3就出来了,那么你这个分区计算完毕之后,是不是该下一个分区了,诶就是这样,所以下个分区我们现在开始做计算了,那么开始做计算呢,同样它应该也有初始值的概念呢,好,那么我们的B出现了,但是这个B出现了以后并没有什么呢我们的初始值,所以这个时候把它标识成蓝色啊好了,那么同样道理,这个B0在这就会出现,在这出现以后,那么我们接着呢,来拷贝,拷贝之后放过来啊,咱们给它放过来,嗯呃,放过来之后,那么我们的这个B0啊,咱们的B。
06:17
比零和我们的这个B4啊,咱们就给它放过来啊,放过来放过来以后,那么B0和这个B4,那么四和零比较,那么肯定还是四大嘛,所以把这个呢,我们反过来啊,箭头我们复制一下。复制以后,那么B4已经有了,接下来呢,是我们的B5,那这个B5呢,因为有B4,所以呢,这个B5啊,其实是直接可以做两两计算的,所以复制啊,复制过来,那么四和五两两比较的话,那么肯定是五大嘛,所以说来我们放过来,放过来以后放到这边,那么这个时候我们的B5呢,就保留下来了,对不对,就是这个意思啊,好,回过头来看下一个,下一个是A,记住啊,在这个分区里面,这个A从来没有出现过,所以呢,这个A它也会有一个初始值啊,初始值,那么这个初始值呢,它就会跟我们的A6啊进行一个两两的计算,所以这个A6就跑到了这个位置啊,跑到它了,跑到它以后,那咱们的这个。
07:20
六肯定比零大呀,对不对,那所以呢,我们来这个六就跑到了这里了啊,所以箭头呢,我们复制过来好放到这边,放到这边以后大家会发现两个分区都计算完毕了吧,那这个时候是不是该分区间的计算了呢?所以说来把这个复制啊复制复制以后放到咱们的这个位置啊拉稍微的拉短一些吧,嗯,好了,放到这边,然后呢,我们给它来放到这边,然后呢,我们写上叫分区间啊咱们的计算。咱们叫分区间啊,咱们的一个计算了,那么这个分区间计算的时候啊,同学们要稍微注意一下了,相同的K是不是应该放在一起啊,因为它叫做BYK嘛,那么所以相同的K就应该放在一起了,那么这个我们的A就放在这一块了,对吧?诶,就是它了,嗯。
08:14
然后呢,我们这个B啊,它应该放到这儿,然后呢,这个地方应该放到这儿,诶放过来,放过来以后分区间计算,它是一个分区,它是一个分区,那么两两求和的情况下,那么二和六他们求和,大家想一想,那么是不是应该就是我们的A8呢?诶应该就是我们A8对吧?所以我们放过来它应该是A8,那么同样道理,这个三和五的话,是不是应该是我们的B8呀,所以把这个放过来啊,放过来,然后我们写上咱们叫做B8啊,咱们叫做B8,嗯,好,箭头呢,给它放到这里,这个时候我们的这一个哎分区间它也就计算完毕了啊也就计算完毕了,然后把这个图呢,稍微的咱们补充一下啊,给他补充的画一画,嗯,这个地方会打乱,重新组合嘛,嗯,然后呢,这个复制一下。
09:04
好,复制以后放到这边啊,放到这边放过来,所以呢,打乱重新组合以后,中间肯定是有杀头的吧,这肯定没有问题,对不对,这个咱们后面再讲啊,咱们回过头来,咱们现在的计算结果就应该是A8和B8,好,那我现在把这个图形画完了,大家能不能理解呢?好,我们现在呢,把代码呢,我们写一下来验证一下啊,我们现在呢,把这个关掉啊关掉,然后这个去掉拷贝,拷贝以后写上一。然后呢,来点击OK,点击OK这边给他来,然后呢,我们看看啊,因为刚才我给大家准备的这个数据呢,是这个样子,A1A2和B3,所以A1A2和我们的B3啊好,然后呢,这个是我们的看看啊,B4B5,所以这是一个我们的B4,然后呢写上一个我们的B5啊,然后呢写个A6,所以写上一个我们的A我们的六啊就是这样。
10:00
好了,我写完以后两个分区,那么他们三个就在一个分区,下面三个就在一个分区,对不对,这是我们之前分析过的,现在我们就要看一看我们的结果是什么,因为我的代码都不用改吗?啊不用改就是把数据稍微的变一变,跟我刚才分析的这个果是不是一致的,我们确定一下就可以了,来我现在呢运行啊看一看。好了,大家看一下是不是A8和B8呀,顺序倒无所谓,结果没问题吧,我相信这个是可以的啊呃,那如果再做一个简单的扩展的话,比方说大家想想,我这要是个十呢。他如果要不是一个我们的零是个十,你们觉得结果会是多少啊结果或者咱别写个十了,给一个五诶是不是更好一些呢?大家想想我给一个五的话,你们想想,那回过头来,大家想想回过头啊来回过头咱把这个图呢,稍微的再画一画啊,来这样这样的话呢,让大家在在对整个的数据的流转过程啊,咱们再做一个分析啊。
11:06
来拷贝就是为了加强大家的一个理解的啊。嗯,放到下面来啊,咱们放到下面来,放到这里来啊,好了,放到这里来以后同学们看一下我现在干嘛呢,我刚才说过了,这样是五。啊,那同样道理,这个地方也是五吧,对吧,它也是五啊好,那么你的初始值它是我们的五,然后呢,这个地方它也是五,如果这个地方它都是五的话,那是不是意味着这它也就是五了,它如果是五的话,那么这个地方呢,它应该是我们的五,那么同样道理这个地方也是五,然后下面的地方是不是也是五啊,同学们,OK,那行,我们稍微的来看一看啊,嗯。首先那么五和一那么肯定是五大呀,那么五大的话,这个地方应该就没有A1什么事了吧,对不对,诶就是这样,那好,那么五和二谁大,那么肯定是五大呀,所以再来复制把它覆盖掉啊,那这样的话呢,你会发现数据就变成这个样子了,对不对?那么同样道理的话,五和三那么肯定是五大呀,所以这个地方应该变成了什么,应该变成了这个东西,好,那回过头来,我们这个是B5 B5和B4,那肯定是我们的B5大呀,所以说拿过来。
12:17
那么它俩相等吧,所以这个B5可以保留,没有问题,对不对,所以这个不用管它,那这个A5和A6,那么肯定六大呀,所以这个分区其实没有什么太多的变化,但是上面这个分区就有很大的变化了,对吗?好,回来,那么我们的这个叫A5,诶就放到了这里了,对不对,放这里了,那么我们的B5呢,也就放到了这里了,嗯,那么好,按照这个规则来讲的话,是不是我们的A,它应该是我们的什么五加六应该是11呀,那么这个B应该是五加五,是不是应该是我们的十呢?诶就是这样啊,这个同学们能不能懂啊,同学们在整个的执行过程当中,我们的数据就是这样的一种变化,初始值就起到了一个这样的作用,来咱们试一试啊,刚才我把这个五给他变了一下,看看跟我预想的结果是否相同。
13:14
好,大家看一下这个是不是我们的A11B18,诶跟咱们刚才分析的结果应该是完全一样的,B10A11对不对?好了啊,咱们这个就说到这里了啊。
我来说两句