00:00
好了同学们,我们刚才呢,已经把咱们之前的这个下单啊,点击支付的这个统计已经单独的做完了,那接下来呢,按照咱们之前的分析啊,咱们需要干嘛呢?呃,对于同一个品类啊,要想办法把它的点击数量,它的下单数量,它的支付数量给他,诶连在一块儿对不对?大家有没有听到我说的是连在一块儿,那么我一想到连在一块儿,好像咱们之前学过一些方法就能够做到吧。两个不同的数据源想要连在一块儿,同学们有没有想到一个地方,咱们的join好像是可以做到这一点的吧,就是两个不同的数据源想把数据连在一块,咱们的join可以对不对?哎,就是这样好了,还有什么东西啊?诶,咱们的那个拉链行不行啊,拉链好像也可以把不同的数据源给它拉在一块对不对?还有别的吗?那比方说你能想到join的话,那么那个叫left alter join行不行?好像也可以吧,对不对?
01:03
好,再来还有什么呢?还有呢,就是我们的一个叫Co group对不对,哎,所以啊,那我们现在这个咱们用哪一个呢?好像都能连接,那咱们看看啊用哪一个,如果都能用,咱们就随便选一个对不对,那如果不能用的话,就把它剔除掉啊,那首先卷咱们能不能用啊,同学们卷能不能能用。这个地方我们告诉大家教也是用不了的,哎,老师不对呀,你这不就是连接吗?你将两个数据源当中我们的这边的数据拿过来对不对?那这个为什么不能用呢?首先你要记住一件事情,同学们,我们的这个统计啊,咱们这个统计其实从原则上来讲啊,记住啊,从原则上来讲,我们的数据统计应该是点击数量和下单数量,还有支付数量应该都是存在的。对不对,不可能为零,为什么呢?因为如果为零,就是没有出现过这个我们的下单的话,大家想想,就咱们举例子啊,就意味着在我们这个地方,咱们比方说点击啊,点击点击这边的数据,比方有个A品类A,然后呢,点了100次,可不可能,可能吧,但是我问你,我们在下单当中,可能这个A可能一次都没有,有没有可能。
02:19
就是在我们点击下单的这个我们数据源当中,大家看一下,就是在我们的这个下单这个里面一定会有A吗。不记不一定对不对,就是我们都去点击了,但是不见得这个A存在吧,那所以如果A不存在的话,我问你它可能出现这种情况吗。就是你点击有A,但你下单没有A。那么这个时候咱们这个地方就出不来,但是他恰恰巧了,他要先看点击,就意味着其实如果你下单没有的话,只要你点击数量多,是不是也应该出来,那这个时候你会发现这个join好像就不行了,因为它要求是两边数据源东当中有相同的K能连接在一块儿,那如果你是不同的K就连不到一块儿,对不对?所以啊,这个John就被我们排除了。
03:11
他就被我们排除了,对吧,那么接下来我们再说这个拉链的问题。这个拉链行不行呢?首先拉链呢,它说的是分区的数量,以及分区中元素的数量,它要有一些要求,对不对,但是他说了是相同这个品类的,会把它放在一块儿了吗?没有,所以啊,它的连接方式是跟它的数量和位置有一定的关系,对不对,所以啊,跟我们的这个好像就没有什么关系,那么你用它是不行的,好把这个去掉。好了同学们,那么我们继续了啊,咱们看这个叫做leftoter join,这个lefto join的话,它表述的是什么呢?以左边表为主,对不对啊,那么也就意味着我们现在需要一个主表啊,所谓的主表呢,就是一个A啊,比方说有一个100对吧,然后呢,这边呢,可能是没有的,对不对,有没有可能有可能吧,对不对,哎,这样,但是你能保证他一定这边有吗?
04:12
你也不见得能保证对不对,所以在这种情况下,在这种情况下,如果是我们右边这个表呢,所以啊,它的左和右其实是不确定的情况下,你用它也不合适,就说明啊,我的这个A呀,可能在左边,也可能在右边,那你说你到底是用它呢,还是用right呢,你不确定呢。所以啊,我们统计的结果当中,它不见得存在这种情况,所以你用它呢,可能啊就也不是很合适,所以这个呢,我们也去掉,那咱们也去掉好,那我们接下来看这个叫Co group,这个行不行啊,诶这个行为什么呢?他会在自己的那个数据源当中建立一个分组,跟另外一个数据源干嘛呢?做一个connect连接,就即使我这没有是不是也会存在。它也会放在一个组当中,还记得吗?同学们,所以啊,咱们这个Co group,咱们说了它等于connect,再加上什么group,所以啊,它是这么一个功能,那所以呢,在我们没有数据的情况下,它也会有个什么组的概念存在,所以呢,这种情况下就能满足我的要求,即使它的数据不存在,它也会有那个分组在里面,那这样的话呢,我们就好办了,所以啊,同学看我们这里呢,就要使用我们的core group了,前面咱们分析完之后呢,会发现别的方法可能都不是很合适呀,咱们用这个Co group,咱们一块看看,那我现在就把点击的数量呢,给他拿过来啊,咱们拿过来,拿过来以后咱们是那个叫c count r DD,哎,把这个咱们拿过来,拿过来以后点。
05:43
点了之后呢,干嘛呢?咱们叫Co group,然后把咱们那个叫做什么呢?咱们叫做order count r,把它拿过来,你拿过来以后,你光给他做还不行,为什么还差一个。还有个叫做支付对不对,那么支付在这儿呢,所以你把这三个RDG相同的那个K,它的V给它连接在一起啊,就是这样来。
06:12
点了一下啊,咱们叫VAR回车,回车以后大家可以看到这就是我们的call group r DD,然后呢,给它回航啊,咱们看的会更加的准确一些,诶翻过来啊好了,放过来以后大家会发现这个是什么?这个就是我们的点击的数量,这个是我们下单的数量,这个是我们支付的数量,对不对,而且你记住了,因为我们是word count,其实它只能有一条,它可能有多个吗?不可能。他绝对不可能有多条数据,它一定是什么我们的一条,所以他只要有就是一条,它如果没有那就是个零呗,所以啊,就是我们现在要这个可迭代的集合是没有什么意义的,我就想要它的数量对不对,所以啊,同学们看我现在呢,就准备去变一变,所以来咱们拷贝,拷贝以后点。
07:02
点完了以后干什么呀,同学们,我们这个时候给他来啊,咱们这时候来。咱们叫map values,这个values呢,我们给他写上一个我们的,诶它然后呢,干嘛呢,我们的case啊,咱们的case,这个case里面我们放的就是三个啊来咱们写上咱们叫Li的一个迭代期,咱们的order的迭代期,还有一个我们的配的一个迭代,对不对,哎,就是这样了。好,那我现在呢,我们最终想要什么,你最终想要的就是数量对不对,我们叫Li啊,咱们的c count,嗯,等于它,然后呢,来来来来啊,然后这个呢,是什么呢?是我们的那个order的count,嗯,这个是我们的那个叫pay count啊好了,写完之后,那么我们现在最后的时候,我们就要来了贝拷贝以后,哎,不对,应该写上一个它啊嗯,我们把这个拿过来叫c count,嗯,然后呢,这个叫order count,好,然后呢,接下来我们的pay count,嗯,行了,放过来以后,但是这个地方它肯定不是零嘛,那当你这个可以迭代的时候,就意味着能取到值的时候,它应该就不是零了,所以我们判断一下叫做if啊来,我们这边写上啊,咱们写上咱们叫做这个的迭代,然后呢,我们点咱们叫迭代器啊,然后点我们叫has next把这个。
08:30
这个挪到外面去,把这个咱们挪到外面去,嗯,放到这儿来。好了啊,来,咱们叫做我们迭代器一啊,如果它能够迭代的话,那么它的count呢,就应该等于咱们的这个东西,咱们点我们叫next,嗯,好了啊,但是呢,我们这个地方大家可以看到它这样写的是V,咱们应该改一改啊,把这个改一改,嗯。好了,那同样道理,这个大家能明白的话就好办了呀,所以拷贝拷贝以后放过来,然后写上一个二啊,然后呢,我们这边写上一个二,然后呢,放过来啊,然后这个叫order,放到这里,这个应该是order的迭代,嗯,好了,那同样道理呢,我们再把这个原封不动的放到这边,放到这边以后呢,这边应该是我们的配,嗯,然后呢,这边写上一个三,嗯。
09:24
然后呢,再写成一个三,然后放到这儿,放到这儿啊,然后呢,Pay can。好了,那我现在的这个地方呢,我们就是pay come放到这儿,诶可以了啊,咱们把这个就算是做完了,嗯,做完了以后呢,这里呢,我们写上啊,这是我们最终的那个结果了啊,咱们叫嗯,给他一个RDD,好,这个是我们统计的那个结果,所以说这个可能我们叫啊可能会好一些,嗯。来啊,好,那这个我们统计完成以后,大家想想它的结果,其实就是我们想要的这个结果吧,但是我们说了你的排序啊,啊,你的排序,所以呢,我们在这个地方呢,我们来给它写上叫做点啊,不对,不是它啊,把这个拿过来,拿过来以后在这里呢,我们点儿,我们叫做salt by,呃,我们的这个排序啊,是根据什么呢?是根据我们的下划线的第二个来排吧,对吧,排,然后给他个什么,我们的force是降序对不对,然后点我们叫take,给他一个十,所以啊,这么写完以后,记住了,我们就把咱们最终的那个结果就拿到了,叫RDD,好。
10:36
啊,其实啊,最关键点呢,就在我们这一步了啊,就是看看怎么能够把它连接在一起,得到我想要的这个数量,那行,那这个拿到以后呢,我们来,我们放到这里点,我们叫做什么呢?咱们叫collect。采集啊呃,采集之后啊,诶不对,因为我们这个地方已经take了,对吧,已经take了,所以就不用它了啊,那这样的话已经拿到数据,拿到数据的话,我们这里是不是可以直接去打印了呢?所以我们写上for it啊,咱们的for,诶我们这个地方for it,嗯,好直接print就可以啊。
11:11
好,同学们,我们现在呢,把咱们的程序就算是写完了啊,我们说过最关键的点就在这个地方是如何组合的,咱们采用的是一个叫Co group,只不过在你连接之后呢,它是一个可迭代,你要判断它有没有值,如果没有值就是个零,对吧?诶要把这个事儿弄清楚,我觉得就可以了啊,然后后面呢,就是一个排序,一个降序,然后取前十个,这不就容易了嘛,对不对,好,那我现在呢,给大家呢运行一下,看看结果跟我预想的是否是一致的啊,所以咱们咱们点一下。看一看啊,咱们的这个结果啊,其实代码量还真是不少啊,但是其实大部分都是重复的一些功能,对不对。好了,同学们,我们现在已经拿到了咱们结果,咱们看看结果对不对呀,这个里面是不是61206119,你看它是不是按照我们的这个数量啊,点击数量是不是依次往下排列的,这里面没有重复的,如果有重复的话,那我们会看下面这个第二个,但是发现没有啊,所以咱们这个基本上应该是正确的啊好了同学们,这个就到这儿了啊。
我来说两句