00:00
好了,同学们,那我们接下来讲下一个咱们的算子了啊,咱们下面要讲的是一个叫reduce by key的算子,那这个算子呢,其实咱们在最开始的时候给大家讲word count的时候就已经说过了,对吧?但是我们当时也没有详细的去讲啊,但是其实也不用详细的去讲,为什么呢?因为啊,它这个功能是比较简单的啊,咱们这里呢,一块儿来看一看,把这些都关掉,然后来,嗯。我们拷贝一下啊,这里呢,我们写上一个15,然后呢,拿过来点击OK,嗯。然后放到这里啊,然后呢,那我这个地方呢,咱们就变一变吧,因为你是值类型的嘛,那么所以我们的数据呢,也都变成我们的SC啊,咱们的键字类型会好一些啊,然后写上一个list,然后呢,在这里我们写上一个A,然后一,然后呢,写上一个我们的A啊,写上一个二,然后再写上一个A,然后写上一个三啊,然后再写上一个我们的B啊,然后写上一个四啊好了,那么这么写完了以后,记住了,咱们现在想做什么功能呢?就是我们相同的K分在一个组当中,对它的value做聚合,那这个时候我们就可以RDD点我们叫reduce by key了。
01:21
那么这个by key的含义是什么意思啊,就是相同的key,哎,来做聚合的意思啊,那么by key以后做reduce就是这么个感觉啊,所以呢,我们的reduce它的主要功能是什么呢?就是相同啊,相同的key的数据啊的数据,它进行我们的value的聚合啊,数据的聚合操作啊,就干这个事情用的,所以啊,它其实就隐藏了一个分组的概念,对不对,就是相同的K分在一个组里面,然后对它的value呢,进行我们的聚合操作,那你要聚合的话,这里咱们又要说了,咱们的死该了啊,咱们写上咱们的这个,嗯,死该LA,嗯。
02:08
咱们使该LA语言啊,咱们来,诶咱们的这个语言中啊,它一般的聚合操作,它都是什么呢?咱们叫做两两聚合啊,两两聚合,那那10SPA克呢,那肯定也是让10SPARK是基于呢我们的SKY拉开发的啊,咱们开发的,那么所以呢,它的聚合啊的这个聚合呢,也是咱们的两两啊我们的聚合,所以啊,那既然是两两聚合的话,那么我们给它两个数啊来,那我们不说了吗?相同的我们的K,那么大家可以看到咱们这里的这个AAA不就是三个吗?那么它里面的value就是我们的,大家看一下啊,咱们写上一,然后二,然后三,那么这个时候呢,两两聚合的话会怎么办呢?它会一和二做聚合,对不对啊,那么聚合的方式应该是X,然后写上一个int啊,然后呢,给它一个Y,再写上一个int,然后呢,写上一个箭头啊,然后来我们写个。
03:08
花括号X加上Y就可以了,嗯。那么就意味着一和二先做加号的聚合,那么聚合以后是不是就变成了我们的三了呀,对不对,变成了三,变成了三以后,那你后面还有个三呢,他们俩又形成了两两聚合对不对?所以三和三再做一个相加,所以最终的结果就应该是什么呀,最终的结果应该就是六,这个没问题吧,同学们,这个史GALA中不就有这个东西吗?而且史GALA中可能还稍微的复杂,它还分什么reduce left呀,Reduce right today today,对不对啊,如果这个你不熟悉的话,你需要回头把那块再好好看一看了啊,那咱们这个地方reduce就是这么回事了啊。好,那么我们来写上一个点,我们叫做VAR啊,嗯。好,那么现在呢,这就是我们的reduce的结果啊,Reduce的结果,嗯,好,然后呢,放这里以后咱们来放到这边,咱们点点了之后咱们的collect,然后呢,我们的for it,嗯,For it,然后呢,我们print,好,我现在给它运行一下啊,咱们看一看结果。
04:18
好了,同学们看结果是不是出来了,哎,咱们的A6B和四,那么A6没问题啊,那这个B4,因为你这个B只有一个嘛,对不对,所以他也做不了聚合,所以呢,这个B那就是四了,这个没问题啊,但是呀,有一个现象,什么现象呢?你前面的这个A有三个,你两两聚合它会执行两次,那你的这个B它只有一个,那你这个还做不做两两聚合呢,对不对,这个呢,我们就得需要给大家稍微的看一看了啊,所以来咱们再看我把这个折行。你把它折行了以后,我干嘛呢?我在这里啊,给它来写上啊,咱们写上叫print,然后呢,写上什么呢?我们叫X等于我们的X啊,然后来写成一个Y,它等于我们的Y,嗯,行了,写完以后,咱们现在重新再运行,看一看咱们的效果啊。
05:16
好了,同学们有没有发现我们这个地方其实只有一和二,哎,参加运算了一,二是等于三,然后三再加三变成了六,对不对?有没有发现这个四根本就没有出现,为什么?因为如果它只有一个的话,它是没有办法进行两两计算的吧,所以啊,咱们这里也稍微的说一下,咱们reduce by key中啊,如果我们的key的数据啊,数据它只有一个,它是什么呢?它是不会参与我们的运算的,这个是比较特殊的一种现象,咱们了解一下啊,当你有多个的时候,你两两计算这个肯定没问题,但你就一个,那你就没法做两两计算,根本就直接返回就可以了,对吗?同学们,所以啊,这个东西只要大家搞明白了,我觉得就可以了啊。
我来说两句