00:00
好,同学们,那我们接下来呢,来说一下咱们之前讲的四个不同的方法,他们之间的一个关系啊,因为他们都是key,而且都有聚合功能,第一个叫reduce,第二个叫,第三个叫aggreg,第四个叫combine,很像啊,很像为你说很像就是嘛,那么还有呢,他们都可以聚合啊,所以咱们这里来把它们的这个关系啊和区别,咱们稍微的描述一下,来拷贝,拷贝以后呢,我们写上20啊20,然后写上一个我们的它,嗯,然后呢,我们来放到这边,放到这边以后把这些东西我们全都不要啊,咱们这里不做过多的讲解,所以呢,我们这里RDD点我们叫做什么呢?叫reduce by key,然后呢,我们写下划线加下划线,然后再来我们写上RDD,咱们叫aggregate by key,写个零,然后再写个什么呢?下划线加下划线,然后下划线加下划线,好再来我们的这个呢,有一个叫for by key啊for by。
01:00
Key,它可以减少一个我们的可操作,这是我们的for by key,还有一个咱们叫combine by key啊combine by key,这个by key的话,那么我们的V啊就变成V就完事儿了,然后呢,我们写上啊,咱们这里呢,是我们的X和那个Y啊就是这样,那这个X呢,就是我们的int了啊然后呢,我们直接写上咱们叫X加Y啊写个逗号,嗯,然后把这个呢,我们拿过来啊,咱们拿过来复制,复制以后放过来就可以了啊呃,这个呢,哦,不对,这个呢是我们呢看看啊,咱们的这个YYY,咱们写上一个int啊怎么写,嗯,好,那么写完以后,这是我们四个啊,咱们四个不同的算值,其实大家会发现你这种方式求的就是word count,没问题吧,就是相同的key,就是单咱们举例单词嘛,那么单词的话,把V聚合在一块,不就是word count意思吗?同样道理,这种方式求得的它其实也是word,对不对?还有这个呢,其实也是count。
02:00
而这个呢,它也是word count,前面三个都好理解,第四个怎么也是word count呢?很简单,你给我个一,我就变成一,那以后呢,就是按照一来计算,所以它的结构并没有变,它依然呢是单词和数量的增加,好了,那我们光这么说啊,他们都能实现work了,这个肯定没有任何问题,对不对?但是他们的区别在哪里呢?其实啊,咱们这里呢,可以给大家看看它的源码啊,来同学们,我在这里面,咱们给它点开,点开以后呢,把这个reduce by key我放到这里,我为什么要放到这里呢?我们是需要做一个对比啊,诶或者我觉得是不是在这里可能会更好对比一些呢?同学们,看来我在这里面啊,咱们给它加点东西,大家看一下啊,这是我们的reduce by key,那么它的源码当中,我们来点一下点点完以后再往下点,然后再往下点,诶点到这个位置,大家有没有发现在第69行的时候,它里面会有一大堆的逻辑对不对,这个咱们暂时不管了,所以后退后退以后咱们就发现呀,它的这个地方。
03:00
咱们拷贝,拷贝以后拿过来,嗯,放在咱们的这个位置啊,所以它的核心的源码逻辑呢,其实是这个叫做combine key with class t,哎,有这样的一个操作对不对?好,然后呢,我把咱们这个东西啊给它折个行,为了让大家看的更加清楚,所以呢,诶这个是他,然后呢,这个是他,然后这个是那个叫partitioner啊这个咱们后面再说,然后呢,接下来咱们再往下看,下面有一个叫aggregate by key,所以诶放过来啊,我们来看看他在做什么事情啊,咱们点点完以后叫aggregate by key点然后呢,往下走,往下走诶。它里面好像调用的也是它呀,所以我们拷贝,咱们再点过去吧,诶,69行完全一样,所以后退,后退以后把这个咱们拿过来,拿过来以后啊拷贝,然后放到咱们的这个位置,放过来以后呢,我们来给它折个行,为了让大家对比的起来,看的方便,所以给它放到这儿来啊,然后呢,给它缩进,缩进,缩进放到这边来啊,嗯,行了,接下来我们再来往下,下面是for back,点一下,再点,点完以后你往下看,其实最终走的还是这个69行,对不对,所以后退,哎,走到这个位置啊,所以我们拷贝,拷贝以后拿到咱们的这个位置啊,好了,咱们叫做for by key对吧,那咱们叫for by key行,那这个方法呢,咱们也给它缩进一下,嗯,缩进。
04:27
缩进之后放过来啊嗯。然后我想想咱们这个地方给他放过来吧,嗯。好,然后呢,这个地方啊,放过来,嗯,行了,接下来我们再来啊,这是我们的它,然后再来一个叫combine back,行,那么我们放到这里来缩进一下,嗯。呃,放过来以后,同学们看啊,我们看它的底层点一下,点点完以后你会发现它底层掉的就是come back with class t,再点,点完以后再点还是69行,所以后退后退以后把这个咱们拷贝过来,嗯。
05:04
好了,咱们给他放到这边诶,放到这个位置好了,为了让大家看着我们舒服一些啊,然后孩子给他折个行啊嗯,折个行,然后呢,这边放过来,然后这边放过来啊,好,然后呢,我想一想啊,因为啊咱们的这个参数比较多,但是有一个参数咱们暂时可能没用上,就是这个叫partitioner,所以这个咱不要了啊,因为他咱没用上嘛,但他都有嘛,所以我们不看它也是可以的,所以这个partitioner我们不看了,好,那不看了以后大家有没有发现发现什么他们的方法其实是完全一样的呀。他们的方式完全一样,来咱们搜索一下,你看。都是标黄了吧,说明它完全一样,那么它的区别在哪呢?其实大家可以看到我们的reduce backy,咱们回过头咱们点一下,大家看一下它的这个V,第一个数据,记住啊,诶,咱不看这个吧,咱们不看这个,咱们如果回过头看这个可能会更好一些,叫combine byck key comeba byck key的话,大家看一下它的123,那就说明啊,我们点点完以后,咱们传的三个我们的参数分别表示的是第一个数据做什么样操作,然后呢,我们第一个和第二个的分区内做什么操作,这是分区间对不对,所以后退,那么我们就能明白了,咱们的这个,它表述的含义是什么呢?就是我们相同T啊,来相同T第一条数据啊,数据它进行的处理啊进行的处理,哎,就这个意思,而我们这个呢,它表什么呢?它表示的是什么呢?这个啊来表示。
06:39
我们的分区内啊,数据的处理函数啊,好,然后这个呢,我们写上啊,咱们叫做表示分区间啊,我们数据的处理函数,所以啊,这个呢,我们稍微的说一下啊,那所以呢,这是三个我们不同的功能,第一个是相同K的第一条数据我们做什么样的处理,比方说结构的转换之类的,对吧?而我们这个表述的是分区内,这个表述的是分区间,这个如果你明白的话,在方法相同的情况下,那么大家看这个叫for by k,这个for by k就意味着我的初始值跟我们的第一个值,它所进行的什么东西叫分区内的计算规则,对不对?所以我们说一下啊,咱们叫初始值和我们的第一个key的value值啊,Value值它进行的分区内数据操作没问题吧,你从代码中是可以看得出来的呀,这个就是那个出。
07:39
式值,这个V就是相同K的第一个值,而这个你看他们仨一样嘛,所以这个呢,我们写上啊,咱们叫做什么呢?叫分区内计算规则,这个呢,我们叫什么呢?叫分区间,但是你会发现什么我们的for的方法,它的分区内和分区间用的是同一个,所以我们这里大家可以看到是不是简化了,因为用的是同一个嘛,咱们这就简化了。
08:05
好,我们回过头来看,我们的这个叫aggregate by key,这个是不是含义完全一样,所以我们拷贝,拷贝以后放过来啊,放到这里,而我们下面这个地方就不对了,为什么?因为你的初始值它用的是分区内,这个没有任何问题,但是分区间的规则他们就不一样了,所以呢,给它放过来啊,放到这个位置,所以他们不一样。嗯,好,再回过头来看,这个叫做reduce key,有没有发现我们没有初始值,那么你的第一个值就变成第一个值,所以说第一个值是不变的,它有什么就是什么,所以呀,我们说一下第一个值啊,来说一下第一个值它不会啊,参与我们的计算啊,你给我是什么就是什么就完了,而这个呢,它叫分区内计算规则,这个叫分区间计算规则,咱们是不是讲过了,Reduce be的分区内和分区间的计算规则是完全相同的?
09:03
没问题吧,同学们,这就是源码当中你能够看到的内容,那这样的话,对他们的理解应该更加的深刻了。
我来说两句