00:00
好了,同学们,我们之前呢,已经啊,把咱们需求一咱们做完了啊,但是呢,我们做完是做完了啊,但是我们之前就讲过一件事情啊,咱们说呢,完成比完美更重要,对不对,但是呢,你现在已经完成了,那你该怎么办了,是不是该是完美的完成了,对不对?同学们,所以啊,我们接下来呢,得把咱们的这个程序啊,咱们稍微的去看一看,看一看它的这个地方有没有一些我们需要改善的地方,对吧?哎,在时间允许的情况下,我们看看能不能需要去什么有一个地方改善它,那么这里呢,我们来看一看啊,同学们来咱们找一下,嗯。呃,那么首先呢,我们就发现了一个现象,第一个就是我们的这个XRD,它被重复使用的次数是比较多的啊,咱们先找到问题的这个现象啊,来把这个先关掉,关掉以后咱们打开,然后这个拷贝啊,咱们写上一个咱们叫做零二。咱们还叫做REQUIREMENT1啊把这个诶。
01:00
把这个咱们改一改啊,来拿过来点击OK,呃,放过来以后放到这里啊。然后咱们找一下他的问题,第一个就是我们的这个action啊,咱们的RDD啊,咱们写上一个Q,这是问题啊来然后呢,这个呢,Action I,嗯,RDD呢,它的这个重复啊来写上咱们叫重复使用,嗯,这是我们的第一个问题啊好,那我们再来看一下,除了这个以外,还有一个呢,就是我们这个叫Co group,嗯,咱们这个呀,就是感觉上,诶怎么都感觉上连接起来呀,三个数据源去连接有没有什么问题对不对,而且当我们数据去连接的过程中啊,这个性能会不会有问题啊,所以呢,我们来看一看,呃,那我们这里我们点一下叫Co group,点点完以后我们再点击它,再点,点完之后呢,大家会发现有一个这个叫Co group的RD。所以啊,我们把它再点进去,点点完以后呢,我们往下来看,往下来看它里面有一个叫做get depends,就是获取当前的这个RD的依赖,那么这个依赖当中啊,它会有一个判断,判断什么呢?分区是否相同。
02:14
啊,如果要是不相同的情况下干嘛呢,叫做suffer dependency,这也就意味着它的数据源当中啊,如果分区规则呀,它不相同,那么在这种情况下怎么办?那么这个时候呢,它会采用杀的操作,让它更均衡一些,那这个我们不见得这个分区其是相同的,对不对,为什么?不同的数据源嘛,你不能够保证他们的一定相同对不对,所以在这种情况下,它有两种我们不同的依赖,有可能是one two one,有可能是沙Le,所以那就意味着咱们的Co group,从这个角度来讲的话,它是有可能会存在沙uffle的,对不对,所以啊,咱们的Co group啊,它有可能啊,它会什么呢?存在咱们的沙Le,那如果有可能存在沙的情况下,那你的数据源的数据量就会比较多啊,就会比较多,所以这样的话性能就会受到影响,所以啊,我现在啊,就在想一个办法,我能不能够。
03:10
不使用Co group也可以完成这个操作啊,为什么呢?因为你这个是在我们的数据源当中分组,分组之后再连接,而且还可能有风,所以就感觉啊,这个确实性能上有点低,那如果我们不用这种方式也能实现同样的功能,那这样的话不就好很多嘛,对不对?所以啊,咱们现在呢,就有个想法,就是我们需要去什么改善它,所以啊,咱们刚才的第一个问题呢,是我们的重复使用,那么接下来说第二个问题啊,就是我们的这个叫做什么呢?Co group啊,它的性能啊可能较低。啊,可能较低,为什么可能有沙Le嘛,对不对,诶就是这样,而且是多个数据源,你像之前那个world count就一个数据源,也就还好,那你多个数据源有沙Le,那你这个性能肯定非常低,对不对?那行,咱们别的不说,先一个一个解决,第一个重复使用,那这个我相信大家应该非常熟了吧,对不对,什么意思?你把这个XRDD,你既然重复使用,我们是不是可以想办法给它放在我们的缓存当中啊,所以咱们这里呢,给一个就可以了,对不对?那如果你想要数据安全的话,放在我们的checkpoint当中是不是也可以啊,检查点,但咱们这就不需要放了,对不对?诶这个就不用管它了啊好,那接下来呢,是我们的Co group性能可能比较低,那这个我们怎么来去改善它呢?那我想一想啊,其实呀,就是你不管怎么做,你最终的目的就是为了得到它,那么这个时候我就看它,那我现在我能不能就是不使用Co group,如果我们能够把前面的这几个数据源的数据都变成这个样子。
04:43
那是不是好像也可以啊。什么意思啊,同学们看啊,就是我现在咱们来看一看,我们现在的这个数据源是什么样子呢?是这个样子的品类,加上点击数量对不对,诶咱们看啊,咱们加上一个点击数量,这是我们现在的数据啊来。
05:00
大家看啊,这是我们现在的数据行了,然后呢,我们再来拷贝啊,拷贝以后来现在呢干嘛呢,我们把这个叫做下单数量放过来,同样道理,我们现在呢,把支付数量我们放过来,也就是意味着我们三个数据源的数据应该是现在这个样子,我们最终呢,把它合并成了这个样子,对不对?来完成我们数据的聚合呀。但是我想了一下,其实如果呀,我们不把这三个数据给他干嘛呀,给它变合并成这个东西,其实也能达到这样的效果,什么意思?我这样的话行不行呢?我直接就把它变成什么大,看我现在直接变,我就把这样的数据来拷贝,我变成什么,变成这个样子直接变啊,咱们别合了,咱们直接就变,我这么写行不行。我叫点击数量,那你这个等于没有下单没有支付呗,把这样的数据我变成这个样子。
06:00
大家想想对不对,你像想这个数据跟它是不是就可以了,那好,同样道理,我的这个地方大家想一想,那是不是就可以干嘛呀,我们写上诶或者说诶就这写上了拷贝,拷贝以后这是不是就下单数量了。下单数量不就第二个吗?那第一个不就没有吗?那同样道理啊,同学们看来拷贝拷贝以后,那我们这里的话是不是等于支付数量,那么支付数量的话,下单数量就没有呗,所以就是它,所以啊,如果我能把咱们的数据变成我们的这个样子的话,我问问你,我们相同的K能不能两两聚合。如果两两聚合的话,大家想想,他们两个聚合在一块儿的话,点击数量加零还是点击数量,下单数量加零还是下单数量,他们俩不就聚合在一块儿了,对不对?它俩聚合在一块的结果是什么样子的了?同学们看看,想一想,它们两个如果聚合在一块儿的话,那么它的数据是不是就变成了拷贝,拷贝以后大家看一下是不是就是点击数量,然后下单数量变成零了?
07:05
那好,相同的K再两两结合,那么再往下它们的结果又变成了什么呢?诶往下走,大家看一下咱们拷贝,拷贝以后往这儿放,那是不是支付数量跟它就放在一块儿了呢?所以啊,你会发现这个结果其实恰恰跟我这个结果是完全相同的,但是呢,这种操作呢,其实就不需要什么Co group这种东西了,我们只需要转换结构,两两聚合是不是就可以了,同学们,诶,所以就是这个意思啊,所以咱们的思路呢,稍微的就有点变化了,那咱们实现方式呢,就得去改变了啊,所以来把这个呢,我们给它去掉,咱不要了,嗯。咱不要了,以后咱们怎么做呀,同学们,咱们这么来啊,把前面的那个叫做嗯,咱们的count r DD,然后呢,点咱们给它来map一下啊,映射一下,这个映射呢,我们就给它写上了,咱们来写个画括号,这个叫case啊,这个叫case,这个case的第一个咱们叫做cid品类ID,第二个我们叫做count,对不对,OK,你想变成什么呀,你想变成什么,同学们你就想变成这个样子吧,叫点击数量000吧,所以呢,大家看一下我们想变的其实就是cid,然后括号我们叫count,然后零逗号零对不对,其实啊,我们用那个map values是不是也是可以的,对不对,也可以啊,但是我们这里呢,就让大家直观的看到这里啊,就是cid,然后看看零零,诶就这意思,那好,这个如果你能明白的话,同学们看啊,这是我们的一个RDD1啊,其实我们这个就嗯,就叫RDD1吧,哎,无所谓啊好,然后呢,我们再来干嘛呢。
08:45
啊,咱们那个叫order的count是不是也可以这样啊,所以拷贝拷贝以后拿过来,那拿过来咱们这个地方,咱们来写上,咱们叫做什么呢?嗯,我们叫做order,那order的话,这个count可就不是这了,这个order呢,应该是我们的这边吧,第二个是我们的下单对不对,同样道理,这边就写个二啊,然后再来一个,我们写上一个三,嗯。
09:09
好了,那么我们写上一个三,写上三以后,那我这样就写个零呗,那它就写上一个count呗,那这边就写上一个我们的配不就完事了嘛,对不对,诶你就这么写,你这么写完以后,大家会发现我的数据就变成了这个样子,那么我们把相同的cid给它连在一起不就够了吗?对不对,而且记住啊,这是三个不同的数据源,我首先要把不同的数据源我连在一块儿,然后相同的CAD22聚合就够了。所以啊,咱们接下来咱们要做这么一个功能什么呢?将啊来写上,将我们的三个我们的数据源,咱们叫合并在一起啊,统一进行我们的聚合计算啊,咱们叫聚合计算就意味着呀,你之前都是独立的,现在呢,我把三个不同的数据源连在一起,为什么?因为他们表述的含义都是一样的呢,那我就可以合并在一起统计啊,诶统一吧,咱们叫做统一啊,写错了,统一进行聚合计算。
10:12
那统一进行聚合计算的话,那我们就来吧,我们写上r dde,大家看还记得吧,我们有一个叫做点,叫做点UN,还有印象吗?同学们,就是我们的RDDR,诶,好了,然后再来点,我们叫做union,然后呢,RDD3,这样的话,你将三个数据源就连接在一起了,所以呢,我们写上啊,咱们叫做source,我们的RDD,好了,那你现在我们就等于一个大的数据源了,大的数据源那么相同的KEY22聚合就完事了呗,所以来我们写上叫做点,我们叫做reduce by key,那么两两聚合的话,那么我们这里就写上了啊,来我们写上一个,咱们叫做第一个T,这个叫T,嗯。好,写完的时候,那么我们这里呢,给它来一个啊,我们写上它,咱们叫做这个等于它,嗯,那我这该怎么写呀,很简单呀,那就是就是我们的零和零呗,对不对,说白了就是第一个和第一个,第二个和第二个呗,那所以括号诶,我们写上T一点下划线一,然后再加上T2点下划线一,没错吧,然后呢,T一点下划线二,再加上T2点下划线二,对吧?嗯,T一点下划线三,再加上T2点下划线三,你这样写完以后,那么最终的结果就是你需要的那个结果,然后一排序,然后呢以降序再去前十个,跟之前就没有任何的区别,所以啊,我们是在之前的这个数据源的基础之上做了一个结构的变化,然后呢合并再做聚合,所以这样的话呢,也能达到之前的那个效果,没有问题啊,好,那我们现在来验证一下这种思路,这种写法有没有问题啊。
11:59
其实就是这样的一个思路啊,嗯,好,我们来运行一下。
12:06
嗯,好了,同学们,结果已经出来了,咱们回过头看一看,612061196098没问题吧?同学们结果完全相同啊。
我来说两句