00:00
好了同学们,那我们接下来呢,就准备来写代码了,咱们的分析啊,设计呢都已经完成了,嗯,接下来我们要做的呢,就是把代码呢真正给它完成了,首先第一个那读取数据嘛,那你的数据不就在这个agent里面吗?所以拷贝拷贝以后我们叫做什么呢?我们叫RDD,它等于SC点。然后呢,我们叫date啊,把这个放过来,放过来以后,那么我的RDD就是我们的原始的数据了啊,所以咱们可以起名叫date r DD。好了,那么起完名以后,那么我们说了,我们要转换它的结构啊,所以我们拷贝,拷贝以后点记住啊,转换结构,咱们一般用的都是map的方法啊,Map的方法,那么这个map的方法呢,那么我们拿到的就是一行一行的数据,对不对,所以把这个放过来,那么一行一行,但是我们会发现咱们数据啊,它是用空格隔开的,咱们首先先分解一下,所以点我们叫做split,然后给它来个空格,在前面咱们写上数据,因为你被分解成了啊,我们一个一个的数据,诶,但是我是全要吗?不是,所以呢,我们干嘛呢,我们这么写着啊来我们分析一下,当你用空格分解之后,它就是第一个,它的索引编号是001234,所以呢,我们的这个地方,它应该是写个括号,我们的省份零一应该写成一个一再。
01:36
写上一个逗号对吧,然后呢,我们的01234,那么它应该是四吧,所以date时我们写上一个四,然后呢,在我们的外面的位置给它一个一,你这样的话不就OK了吗?同学们对不对?所以这个就是我们想要的呀,好,那么我们给他来啊,咱们来我们写上啊,这是我们map转化了结构的那个RD,诶咱们放过来,那么你放过来以后,那我们说了你转换结构之后,那么我要分组聚合,那我又分组又做聚合,咱们是不是有一个性能比较高的算子叫做点。
02:17
我们叫做reduce啊,咱们叫reduce by key啊,那么我们相同的这个key,它的value做两两聚合,那不就下划线加上下划线吗?对不对,这个咱们之前讲过啊,好,我们点一下,咱们叫VAR,这个呢,我们就叫reduce r DD就可以了啊好了,那我现在呢,把这个做完之后,接下来他就告诉你了,说了不行啊,为什么不行呢?因为啊,你的这个聚合之后啊,省份和广告它是个整体,而我要的是把省份和广告干嘛呢?给它拆分开,那所以呢,这个时候大家看我们的reduce r DD咱们点。点了以后是不是应该给它转换结构啊,所以写个map,但是呀,因为它有特定的格式,为了处理方便,咱们用模式匹配,咱们叫case,然后写个括号,这个括号里面再写个括号,我们叫private省份,再写上一个ad,咱们叫广告,然后后面呢,咱们就叫sum,所以啊,咱们的数据的格式呢,其实就是这个样子,这是用来做模式匹配的啊,希望同学们把模式匹配要好好的搞清楚啊,那行,接下来写个箭头,写个花括号,那么花括号当中我们想要什么,我不就想把省份proce给他来,哎,提出来,然后把广告和那个sum给它包进去吗?所以我最终的结果是不是应该是这个样子呀?哎,所以我们来啊,我们再写上一个map r DD,哎,又转换了一遍,咱们写上一个什么呢?咱们叫做new吧,New map就是一个新的转换的RDD啊,否则这个起名啊,容易重名了。
03:58
好了,那我现在这么写完了以后,大家想想,那我现在这么写完之后,那是不是数据就变成了这个样子了,那么省份相同的,咱们就应该把它们放在一个组当中了吧,所以拷贝拷贝以后来吧,我们点我们叫group,同学们记住了我的省份是不是K啊,所以说我们这边group by key就可以了,你BYK以后点我们叫VR回车,回车以后大家可以看到这个就是我们的group r分组的那个R,这个就是我的省份,而它是什么?是我们的广告和点击的数量的一个集合,但是我们接下来干嘛呢?要组内排序了吧,而这个组内排序的话,跟这个key有关系吗?没有关系,当我们想对数据做转换,可是跟K没有关系的时候,只跟V有关系时候,我们讲过有一个算子能够很方便,这个算子就是我们的格。
04:58
RDD点有一个叫map values,还记得吗?
05:04
这个map values就是当我们的key保持不变,只对V做操作的时候,我们就用这样的一个算子啊,那么map values你拿到的不就是我的value吗?它的value不就是一个迭代的可迭代的集合吗?咱们就叫做可迭代的集合,诶,就这么写就行了。那好,那你说过了,我们这是要排序的呀,那来吧,拷贝。点一下咱们这里能干嘛呢?咱们叫少,诶好像点一下点我们的好像它是不能够排序的呀,为什么可迭代的集合它是不能排序的,可是我又需要排序怎么办?诶,我们写上叫点我们叫to list,把它变成一个可以排序的集合不就完事了吗?然后点我们写上叫做sort by,或者呢,Sort with,这些其实都可以啊,来,咱们写上一个叫BY吧。
06:00
这个sort by,那么大家想一想,我们是不是根据我们每个元素的第二个值来做排序啊,所以下划线点我们叫下划线二,这个时候就是按照咱们的int来排,没问题吧,下划线二不就是元素当中的第二个吗?可是你这么排啊,记住啊,咱们这个to list变成了GALA的集合,GALA集合的short by,它默认情况下是什么?是我们的升序,可是我们要的是什么?是降序吧,所以这个地方应该再加一个。大家该集合的方法还是需要很熟练的啊,那么这里我们应该怎么办?诶,排个序,咱们点,咱们叫int,再来一个,我们叫做什么呢?叫reverse。这样的话呢,就可以降序排列,但是你排列好之后全要吗?不是我们再来点我们叫做take啊,取我们的前三名,所以当我们做完这个操作以后,Key保持不变,但是可迭代的集合当中就只剩下三个了,所以这个呢,就是我们想要的结果叫R,好了,那既然是我们想要的话,那我就采集一下啊,把它打印在控制台上,咱们叫collect,点我们叫做for it,然后print,嗯。
07:24
行了,同学们,我们现在给他来运行一下代码,咱们都写完了,就看咱们的结果有没有问题了啊,结果没问题,这个需求咱们就做到这里了,写这个需求的主要目的呢,就是熟练使用咱们之前所学过的那些方法,那些算子啊同学们,好了,结果出来了,咱们简单的看一看啊,咱们这个地方呀,大家可以看到前面就是我们的省份,这个倒是无所谓了啊,但是你看后面,后面的这个地方是不是就是我们的什么东西啊,咱们的数据当中的,大家看看什么东西是不是广告啊,那么广告前面是广告的ID,后面是我们广告的点击数量,25 22 22 2723 22是不是一个降序的排列,而且它只有三个呀,就是这样的啊,同学们,这个就满足要求了,好吧?
我来说两句