00:00
呃,小练习啊,咱们做完了,同学们,但是呢,其实感觉上嗯有点问题,呃,问题在哪呢?其实大家看啊,我们这里有一个初始值吧,啊叫做A是吧,它的主要目的呢,是为了跟我们的第一个元素呢,进行分区内的计算,这个咱们讲过啊,可是有没有发现问题就出现在这儿了。那如果你把它当成初始值的话,那么这个A其实就已经出现了一次,对不对?但是你会发现咱们在做数量做统计的时候,其实是没有把它认为出现一次的,会把它认为是出现一次,所以说当我们给大家去准备这个数据的时候,你会发现它的计算结果呢,其实只出现了一次,但是明显从这个角度来讲,它其实是出现两次的,对不对?那这个没有办法,为什么?因为这个初始值啊,是我们为了计算方便,临时加的一个值。啊,那么所以我们不算它出现对不对,可是从我们的计算原理来讲的话,它确实出现了,所以这样的话有点说不通了。
01:01
虽然说结果是正确的,但有点说不通了啊,所以啊,那我们能不能想个什么办法呢?大家想想,如果你现在把咱们的初始值去掉。诶,有没有发现你的这个A,它其实本来就出现了一次,而且它的这个数据本来就是这个样子,对不对,所以啊,我们之前的思路,如果换一种方式来讲的话,我们可能有点变化了啊,咱们看来把它拷贝。把我们画的这个图啊,咱们给它拷贝下来复制,复制以后往下走啊,咱们往下走,往下走啊来。好了,然后呢,我们回来回来回来大家看我现在的这个东西啊,我们稍微的想一想啊,能不能变换一下思路,什么意思呢?就是说我们这个零不要了啊,这个零咱们不要了,那你不要的话,你干嘛呢?你会发现其实如果把这个零都去掉的情况下,同学们看啊,来把这个都去掉去掉去掉。你会发现其实是不是也能说得通,什么意思啊,你看我们的A1变成A1出现一次,把这个B3变成B3出现一次,其实是不是也能够说得通。
02:14
哎,就是这样,所以既然是这样的话呢,我们只要想办法把第一个数呢,给它变成它,那么然后跟第二个数做结合,是不是也就可以了,所以啊,第一个数据,其实我们如果没有初始值,我们直接拿第一个K来做转换的话,那好像也能实现咱们的功能,对不对?所以啊,咱们的思路就有点变化了,同学们看啊,我把咱们的这个地方啊来往这边挪一下,把这个箭头往这挪,然后把它拉大一些,拉大的目的是什么呢?就是把这个东西啊,我挪到这儿来。大家我挪到这儿来,你挪到这儿来以后,那其实是不是就不需要它了呢?对不对,同学们想想是不是这样的,那我就不需要它了呀,那么同样道理,咱们的这个B3啊,B3咱们拿过来,拿过来以后大家想想其实啊,是不是就变成它了,你变成它的话,那这样就没有了嘛,对吧,它就没有了,没有了以后是不是直接就是它了,所以这个其实都不用啊,就直接放过来就行了,所以呢,我们的箭头过来啊,过来拉大一些,拉大以后呢,我们就完全可以这样啊,把它往后挪一挪,然后箭头呢,直接拿过来。
03:19
拿过来以后这个B3呢,我们也是一样的啊。把这个呢复制一下啊,好,那同样道理啊,这个思路大家能不能明白,就是把第一个数变成这个样子,然后呢,他来参与我们后续的运算,诶就是这个,所以这种情况下,大家想想是不是也能实现相同的功能啊,只不过咱们这个初始值的概念可能就没有了,那么同样道理啊,这个思路如果大家明白的话,你后面不就完全一样了吗?你把这个给它拉长。啊,你把这个给它拉长,拉长以后这个B4A放过来,咱们给它放到这边来啊,诶放到这个位置好了,那这个呢就去掉了,去掉以后呢,来把这个呢给它复制到这个位置,那这样的话不也是OK的吗?同样道理,咱们这个呢拿过来啊,然后呢,把这个我们的它放到这边,然后呢给它复制,复制以后放到这边这个地方呢,来把这个放到这儿啊来。
04:14
放到这里啊,然后箭头呢,给它复制过来啊,好,大家有没有发现思路上有点儿变化,但是这个处理过程应该大同小异吧,就是把咱们的第一个值就不要参与到我们分区内计算了,而是对第一个值进行一个转换,让它的结构满足你的计算要求,那么这种情况下也能够实现一些特殊的处理啊,那这个操作呢,在咱们SPA当中,它有一个特殊的方法可以来实现,所以呢,把之前的这个给它关掉。关掉完成以后,我们写上咱们叫19啊,咱们来写上19,然后呢,给它去掉啊,然后呢,我们点击一下,点击OK啊放过来,放过来以后呢,我们放到这里,然后呢,把刚才的这个思路呢,咱们稍微的变一变啊来把这个去掉,去掉以后这个我觉得都留下吧,但是我们这要变一变,什么意思呢?我们就不能用它了,为什么呢,没有数值的概念了,那怎么办?哎,咱们这样,咱们叫做什么呢?叫combine。
05:13
有这么个操作叫做combine by key,这个combine by key呢,它的主要功能就是把我们参与运算的第一个数呢,做一些格式的转换,所以它其实是有三个参数的啊,所以大家在咱们这里说一下来,呃,我们这个地方啊来这个方法它需要我们的三个参数,那么我们的第一个参数它表示OK,然后呢,写上第二个参数,它表示还有我们的第三个参数啊呃,第三个参数它表什么呢?咱们叫分区间啊的计算规则的计算规则,而我们这个叫分区内的计算规则,好,那这个呢,就是说将我们相同K啊K的第一个数据啊,第一个数据进行结构的转换啊,咱们的转换。
06:09
啊,实现啊,我们的操作,实现我们的这个操作吧,嗯,你不就是因为你当前只是一个我们的一吗?那如果我变成一个一逗号一的话,那不就OK了吗?对不对,那跟后面就没有就一样了呀,所以说大家看一下你之前不就是一个V吗?就是V对不对,然后呢,我干嘛呢?我把它变成我们这边写上一个括号啊括号,然后呢,我们写上一个V逗号一,哎你这么写就行了啊,然后写个逗号,嗯就好了,但你这么写完呀,有一个什么问题呢?就是因为你的这个ta呢,是我们在运行当中它才能够得到的,所以呢,我们一般情况下,我们这边是需要把它的这个类型给它确定的,所以我们写上叫int int,因为这个V啊,它是一个我们的int,对吧,它是一个int,所以这个ta应该是个int int,好,然后我们再来把这两个tale呢,我们也都变成int int,那这样的话呢,其实跟前面就完全一样了。
07:09
前面咱们有初始值,所以呢,它能够确定我的类型是什么,但你这里是动态的变化的,所以说它这个结构啊,不是固定不变的,所以这个数据到底是什么类型,要动态识别啊,就不可能在BA的时候去识别的,对不对,所以在这种情况下,我们需要把它给它加上啊,如果你不加就有可能出现错误。好,那我们现在试一上多了一个叫combine by key的一个方法,它可以把计算当中的一个值给它发生变化,这个过程就跟我刚才画的过程是一样的,第一个值诶不进行运算,它要转换结构,这就是我们的第一个参数,它的作用啊,好,运行一下,运行以后看看它的结果跟咱们之前分析的这个结果是不是相同的,对不对?好,我们观察一下。嗯,好了,同学们,结果出来了,没有任何问题吧?哎,结果是正确的啊。
我来说两句