00:00
好,同学们,我们接下来来讲一下,嗯,案例实操啊,什么叫案例实操啊,诶,咱们前面讲了那么多的方法,那么多的算子,对吧?我相信大家是不是都有点儿烦了啊,为什么呢?因为方法太多了嘛,不好记忆,那我们就准备啊,把咱们前面讲过的一些方法呢,在咱们具体的需求当中给大家看一看该如何使用。啊,其实就是说了这个方法呢,我们在需求当中该怎么去用啊,就是碰见什么样的这种我们的场景去用什么样的方法,对不对?嗯,那接下来我们来看一看咱们所要做的需求呢,是这样的,统计出每一个省份一个广告被点击数量排行的top three。这句话它有这么几个关键性的词语,第一个每一个省份,然后呢,每个广告被点击数量排行的top three,那这样的话我们就得明白一件事情,那么我们要想做这个需求,我们的数据是什么样子的,所以咱们往上看,上面有一个数据准备,就是说你能得到什么样的数据,这边有一个叫agent.log,那这个数据呢,咱们打开,在咱们的这个位置,大家看点开,点开之后有个资料。
01:21
资料当中有一个date啊,这个date当中其中就有一个叫agent dialog,然后呢,我们把这个呢,可以拷贝一下,拷贝以后放到我们的这边啊,给它放过来。放到我们的dates里面去啊,给他放过来,嗯,好了,放过来以后你会发现这个就是我们的数据,它表述了什么含义呢?他说了啊,时间戳,然后省份。城市用户广告,然后呢,这是表示的是每一个数据所代表的含义啊,他们中间是用空格给它隔开的啊,那么总体上来讲,它的每一行表述的是在某一个时间点,某一个省份,某一个城市的某个用户,他点击了某一个广告,那么这样的话所形成的一条数据,那么一条数据就是一次广告的点击,而这个广告的点击我们需要统计它的数量,但是这个统计它的数量呢,要分类,什么叫分类呢?它不是说我们只靠广告点击就行了,它还要考虑省份的区别,它是以省份为单位给它区分开的。
02:32
所以啊,在这种情况下,我们要考虑考虑它该如何实现,那而且用到咱们之前讲过的哪些算子,这个咱们都是需要考虑的啊,好,同学们,那么我们把需求简单的介绍了以后,我们接下来给大家稍微的分析一下,你得把它分析明白了才能去写程序,对不对?有的同学比较着急啊,啊,上来就开始写一个程序了,写个main方法,开始写一些我们的代码了,可是连你的思路都是不正确的,那你说你写代码不就很乱吗?写着写着你都不知道该怎么往下写了,对吗?所以啊,咱们先分析啊,不要太着急,那好,我们怎么分析呢?来。
03:14
我们在这里呢,给大家打开,那打开我们写上啊,咱们叫做RDD,咱们写上叫案例实操,诶咱们叫案例实操啊,那么这个案例实操呢,我们现在一点一点来,首先第一个啊,咱们先看一看,我要知道我的原始数据是什么样子的,对不对,我能得到什么样的数据,这个你得先拿到呀,所以把这个拿过来啊,拿过来以后我点一下,嗯,这里面就写的是啊某一个时间戳,对吧,在某个时间点,然后呢,我们的某一个省份,比方说咱们写上河北,咱们举个例子啊河北,然后某一个城市啊,比方说咱们就写个北京,对不对,哎,无所谓啊,随便写,然后呢,我们某一个用户,比方说张三,诶,好了,他点击了某一个广告,所以我们写成一个A,那就是这个A广告就行了,这个呢,就是我们的一条数据对不对,我这里呢,给它画成一个我们的红色吧,那也换成一个红色啊好,那么然后再来我们同样的是河北呀,北京张。
04:14
三他又点击了什么呢?B的这个广告对不对?诶,还有点击了这个B的广告,诶这个我相也没问题,可是你还有别的用户呢,不光是我们的张三,还有李四呢,所以来我们的李四来了啊,李四,那么这个李四呢,我们放过来啊,他也点击了这个A的广告,对不对,也有可能啊,所以颜色呢,给它稍微的咱们变一下啊,那么李四呢,干嘛呢?他还点击了另外一个广告C,比方说咱们看视频的时候,大家想想我们看视频的时候,诶有的时候会弹出广告对不对,你不小心就点了一下,这完全有可能啊,所以在这个时候呢,我们的李四他又点了个C,这也是有可能对吧,我这个时间点就不给大家去什么呢,送个区分了,因为太长了,不说了,嗯,然后呢,这个时候王五王五来了,王五点的是B啊,诶王五点的是B,所以拿过来啊,咱们写上,咱们叫做什么呢?咱们叫做王五啊来。
05:06
嗯,咱们叫做王五,那这个王五呢,它是我们的B,诶就这样的,但是我觉得你别光一个省份,比方说诶我们的河南对不对,哎,河南,嗯嗯,咱们就写上啊,咱们叫河南,诶河南啊来比方说郑州吧,嗯。来啊好了啊,郑州王五,诶然后呢有一个B,然后呢,他也点了那个什么我们的C有没有可能啊,也有吧,诶所以写成一个他好了,我觉得大概的准备几条数据意思意思就可以了,这就是我们现在啊,从日志当中可以得到的数据,那好,这叫原始数据啊,这叫我们称之为叫原始数据,就是你能得到的数据是什么样子的,嗯,放到这儿。咱们叫做什么呢?咱们叫做原始数据,那你想要什么样的数据啊,或者说想要什么样的结果呢?那么想要的结果他说了每一个省份,记住啊,我就得以省份为单位把它区分开,这个时候大家可以看到这里面咱们的省份不就河北河南吗?所以啊,咱们在这个地方给它稍微的咱们区分一下,这个呢,我们就叫河北啊,咱们就叫河北,然后把这个呢拿过来啊,然后再来拷贝,诶放到这儿咱们写上一个叫河南啊嗯。
06:21
好了,那河北河南呢,我们这里的这个颜色呢,给它标识一下啊,标识一下,这是我们两个不同的省份,两个不同的省份,哎,他又说了啊,我们的每一个省份中,每个广告就意味着我们的什么A呀B呀C,诶他们应该是独立的,那么他们的点击数量的排行,就是说这个河北省当中,它的广告点击数量诶,他的前三名,而河南省它的广告点击的前三名,所以啊,这就意味着来把它放过来,嗯。放过来以后,这边我就写上,比方说A,咱们举个例子A,然后呢,写上一个什么呢?我们叫做100,他比方说被点击了我们的100次,对不对,诶拿过来好,那然后呢,我们再来啊,咱们再来干嘛呢?我们的这个B啊,咱们的这个B,比方说被点击了200次啊,被点击了200次,嗯,好,行了,然后再来,我们比方说C吧,咱们就随便写啊,意思意思,然后再写上一个我们的C啊好,这个C呢,我们写上啊来C,咱们是150次,诶可以了,所以呢,我们的数据啊,可能是这个样子的,这个河南呢,我就随便给一个意思意思得了,放到过来,嗯。
07:32
虽然河北省当中我们的A他被点了100次,B这个广告被点了200次,这个C150次,可是这是我们要的吗?不是我们要的是说按照点击数量来排行,而且是top three不要那么多诶,就要什么前三名啊,所以说他前三名这个没问题,但是它的数量应该是一个排行的概念,而且是top的概念,那么就应该是数量越多的在前,数量少的在后,那所以它应该是一个。
08:04
降序的操作对不对,所以我们的200它多呀,放前面,然后呢,100放后面,然后150这个呢,应该放中间对吗?所以最后的效果应该是我们现在的这个效果,这个大家能不能明白。最开始咱们的原始数据是这个样子,然后这个它是我们最终想要的效果,就是我们啊来咱们叫做什么呢?想要的结果啊,你想要的结果呢,其实就是咱们的这个样子啊,就是它了,那行,那你现在就要想办法把原始数据是不是要变成这样的一个结果就可以了,那我们该怎么变呢?首先咱们前面就说过一件事情,说什么事情呢?就是缺什么补什么啊来咱们写上咱们叫缺什么啊,来缺什么咱们补什么。还有一个你多什么,你要删什么啊,咱们叫多什么,咱们要删啊,咱们什么啊,说的比较白话一点呢,就是说不是所有的东西都是你需要的,对不对,那你多余的就要把它去掉,否则数据太多就会影响你的执行的性能,咱们大数据传输啊,你数据量越多,你不是传输越慢嘛,所以啊,多了什么东西就不要啊,那你缺什么就要补什么,首先咱们来看看咱们缺少什么呢?首先大家看河北。
09:29
广告数量,我们的河北我们的广告是不是都有啊,需要什么数量对不对?哎,数量我们想办法去做就可以了,那么多什么删什么,你会发现时间咱们用吗?你看那个北京城市咱们用吗?张三咱们用吗?所以说你会发现啊,我们这里不是这个数据我全都要啊,我们既然不是全都要,是不是应该先把它删掉一部分,所以啊,就是把它的数据呢,我们给它转换一下,让它的数据变得少一些,所以我们这边来同学看,嗯。
10:03
嗯,我们这边来啊,我们现在想办法把这个呢复制一下,复制以后给它挪过来啊,挪过来,但是我们只保留我们想要的东西,首先啊,就是我们的河北,然后我们的这个A,咱们留下来就可以了啊,就是这样的,所以把这个呢放到这儿来啊好,然后呢,把河北,然后把这个张山和他咱们都去掉啊都去掉,嗯,行了。把这个图样呢放过来啊呃,来把这个呢,我们去掉,咱们这个地方是我们的A。好了啊,然后这个地方呢,也去掉,它是我们的C啊嗯。好,呃,这个是河南了啊,河南他不要,然后这个呢,我们去掉,诶把这个呢拿过来啊,咱们拿过来。好,这个是河南,诶把这个C咱们保留下来,行了,可以了,同学们,这个就是我们现在把数据多余的给它去掉,但是你多余的去掉,河北有了,广告有了,你差什么,你差的是我们的这个数量吧,而这个数量你最后的统计结果是不是应该是我们的word count呀,对不对,所以呀,那我把那个数量加上不就完了吗?
11:16
那么你把数量你加上的情况下,那你的这个时候大家看来拷贝,拷贝以后你要把数量加上,那你怎么加呢?我们讲过了,你这条数据不就等同于这个广告被点击的一次吗?那么那个一不就是个数量吗?所以同学们看啊来,我们把这个呢,我们复制,复制以后我放过来,放过来以后我再加上一个一,对不对,我再加上一个一,同样道理,这边我也加上个一,它就表示的是出现一次呀,诶表示的是出现一次,所以我们缺什么,咱们补什么,缺少的就是它的数量,而这个数量呢,就是诶一次啊,所以把它加上就可以了,但是你加上以后,你是不是该想办法把我们的数据进行聚合,变成咱们最终想要的结果呀,同学们是不是这意思,所以啊,你最终你要变成我们最后的这个样子,那你这个怎么变,那么大家想想这个二百一百五和100是不是多个一相加的聚合结果呀。
12:17
其实啊,你把它想明白的话,不就是word count吗?对不对啊,我们同一个单词把那个count聚合在一块儿,不就这种感觉吗?哎,老师那简单了,那是不是我们直接把我们的这个数据啊,这个一直接聚合就行了,哎不行,为什么呢?现在这个一啊,咱们都有了,就这个count,但是那个word你从哪找啊?哎,老师那简单,你看这里不是那个BCA吗?你BCA的话,那不就是我们的广告吗?那我就拿广告当成word,那么相同的广告就把那个一聚合在一块,Count不就出来了吗?那好,我问同学们,如果现在我们拿咱们那个广告啊,这个A啊,拿它当成word,拿它当成word,拿它当成word的情况下,能不能行?
13:03
你会发现应该不行,为什么不行?因为我们的广告如果按照它来做统计的话,那么它会把不同省份的广告是不是也统计在一起了,也就是说把河北、河南省的这个我们的广告数据就统计在一块儿了。这个还能区分出不同的省份吗?这个区分不出来了,诶老师,那能不能拿省份来做我们的统计呢?我们说也不行,如果你拿省份来做统计的话,这个广告你就区分不了了吧,对不对?你怎么区分ABC啊,你就不能区分了,所以说你拿广告和省份单独来做我们的统计是肯定不够的。那怎么办?诶,没关系,我们的省份和广告他们其实是可以联合作为那个word的。诶,对不对,就是在这个河北省的这个币被点击了多少次,那么这个省份和这个我们所谓的广告不就当成一个整体的吗?他们如果当成整体的话,那我们再做聚合是不是就可以了呢?同学们,哎,就是这个意思啊好,咱们来看。
14:10
所以啊,咱们做过一个简单的分析之后,那么这个时候我们的数据啊,咱们做上来拷贝,拷贝以后拿过来放到后面,那么这个时候大家看啊,我说了把这个我们的诶。把这个拿过来,就是我们的河北A当成整体,它点击了一次,同样道理,咱们的这个河北的B啊,咱们河北的B它也出现了一次,所以拿过来,那我们这里呢,也是河北的A啊,河北的A它出现了一次啊,嗯。所以呢,给它放过来啊,然后这边呢,是我们河北的这个C啊,它出现了一次,然后拿过来啊,然后接下来呢,是我们河南的这个B啊,河南的这个B它出现了一次,嗯,拿过来行,那这个河南呢,我们写上一个C,嗯,它出现了一次,好了,同学们看你这样的话,把省份和广告当成整体,当成个word,这个一叫做count,那么你相同的个word不就要放在一起来做聚合了吗?对不对,所以呢,把这个往后挪,往后挪以后,那么现在记住了,我说了,相同的来河北的A放过来啊,咱学们看相同的我们的word就要放在一起,诶,放过来,然后呢,河北的这个B,哎哟,我这个数据准备的不够好啊,但是含义上差不多啊,同学们,那我觉得这个,嗯,为了大家看着方便吧,我在这个地方我稍微改改吧,好不好不好,同学们,因为我这个数据准备的不够好啊,那我这就写个河北吧,好不好,哎,把这个写个。
15:44
河北啊,我写个河北B,然后呢,我在这写上一个河北啊河北嗯。你写个河北C,那这样的话呢,我们的这个河北的B是不是就给放到这儿了,对吧,放到这儿他们俩就放在一块儿了,嗯,放在一块儿,同样道理,这个呢,咱们也往上一点啊,给它放在一块儿,然后呢,河北的这个C,诶给它放在一起对不对?OK,那这样的话呢,你放在一块儿以后,那相同的word不就把count给它聚合在一块儿吗?所以说这个时候来把这个放过来啊,嗯。
16:18
好,把它聚合在一起啊嗯,行,那聚合在一起的话,那这个地方不就是它吗?它的这个地方应该是什么?是我们的二了吧,诶好,同样道理,把这个复制过来,那么它应该是拿过来啊,拿过来以后这边应该是个二,对不对,再来拷贝,拷贝以后再把这个拿过来,那么它应该就是个二。好啦,那我现在呢,就把不同的这个点击啊给他拿到了,拿到了以后同学们想想跟我们最后要的好像还不是很一样哪不一样啊,是不是因为我们现在是把河和这个广告当成了整体,但是你会发现在这个时候,其实河北和广告它并不是个整体,说明这个结构啊还有点变化,所以怎么办?我需要把结构稍微的我们变一变,什么意思呀,我要把那个省份和那个广告给它拆开,所以来拷贝拷贝,拷贝拷贝之后放过来,记住啊,同学们,我要把这个结构要稍微的变一变了啊嗯,我把这个呢,诶省份去掉,然后呢,把广告呢和什么呢,和它的这个数量呢,诶我们当成一个整体,那这样的话,河北就独立出来了,对不对,同样道理啊,你的这边诶把这个呢去掉,然后呢,把这个去掉放过来,你的河北的省份不也独立开了吗。
17:42
那么你把这个河北去掉,然后把这个那来放过来,放过来以后你放到这儿,那么这个时候大家想一想,你把河北河北河北独立出来,那么相同的省份就可以把它的那个广告的数量是不是就聚合在一起了,这个时候不需要聚合,只需要分组,是不是就是可以了,所以大家看你最后的效果不就应该是这个样子吗?大家想想是不是这个回事,诶,你这么写应该就行了,当然了,你分组之后是不是应该还有排序的功能,排序以后他说了要top three应该取前三个吧,但是总体的思路来讲的话,是不是应该这么写是够的呀,嗯。
18:26
所以大家可以看到我从最开始的数据,我一步一步进行分析,我分析好之后,最终就可以什么完成我们的操作,所以从从这个角度来讲的话,我觉得思路上应该是没有什么太多问题的,对吗?诶找咱们代码呢,跟着这个思路来写,应该能够实现这样的功能啊。
我来说两句