00:00
好了,同学们,需求一咱们已经做完了啊,嗯,需求一咱们用了很多种方式去实现啊,咱们的功能最终的结果反正都是一致的啊,但我们这个用了不同的方式的目的,第一个是为了提高效率,第二个是为了简化开发,对吧?啊,他们说了要完美的完成嘛,对不对?但是其实你会发现,你不管怎么做,你最终实现的过程其实都离不开那个叫world count,对不对?所以啊,大家不要把那个world count想象的简单了,因为在实际的需求当中你绕不过去,其实可能啊,这个需求不能让你一眼看出来它是个word count,但是它万变不离其宗啊,诶,怎么转换最后都会包含word count,哎,这个同学们下来再体会体会好吧,嗯,需求一咱们就告一段落了,咱们接下来准备来看需求二啊,同学们。呃,需求二咱们要做什么内容呢?他说了叫top ten,热门品类中每个品类的top ten活跃session的统计,诶这个好像有一个咱们比较熟悉的东西叫top ten热门品类,这个不就是刚刚我们那个需求一它的一个结果吗?你把需求一的结果拿过来就可以了,所以啊,他说了是热门品类top ten当中的每个品类,那么就意味着这个是十个吧。
01:23
然后呢,是top ten活跃session,每个品类当中有十个活跃的session,这个session你现在可以简单的理解为用户对吧,那说明啊,在每个品类当中活跃的用户都有谁,所以啊,它是这么一个统计功能。所以咱别的不说,那其实你会发现还是我们的word count对不对,他还是要统计那个数量,活跃就是那个数量对不对,你点击的数量越多,那不就是活跃嘛,所以他说了在需求一的基础上,增加每个品类用户session的点击统计。所以啊,我这个地方就不考虑别的,就考虑点击,所以啊,咱们首先咱们只保留点击的数据,还有我要看一看你是不是在咱们的前十的热门品类当中,所以啊,咱们有这么几个要求啊,第一个我们只看点击,不看别的,第二个你的品类要在我们的top ten里面,所以咱们接下来咱们就直接来写我们的代码,那好,这里我们直接拷贝啊拷贝,嗯。
02:26
然后呢,我们我想想啊,咱们拿这个二这个拷贝吧,拷贝以后呢,我们写上一个五,然后呢,Requirement写个二,然后呢,这个地方我们去掉,咱们写上叫做什么呢?叫做session啊,咱们叫做session,嗯,好了,哎,那我现在呢,把这个呢,我们拿过来点击OK啊点击OK,然后把这个呢放到这里,放到这里之后把这个文字性的描述咱们全都不要了。然后呢,把这些东西我们全都不要了啊,但是有一个现象,什么现象呢?我需要把咱们第一个需求当中的结果呀,给它稍微的封装一下啊,否则东西太多看着可能会有点乱啊,所以我们这里写上咱们叫DEF啊,咱们就叫top ten,嗯,Top ten,我们的开GR啊。
03:13
OK,然后呢,把这个拿过来,然后把这个呢返回值呢去掉啊呃,我现在同学们看啊,我们现在就在这个位置啊,这就是我们的前十呀,所以把这个呢,我们拿过来啊,反过来。放到咱们的这里啊。好了,呃,那这个地方呢,我们的这边有个叫XRDD,那我就把这个XRD咱们拿过来呗,所以呢,咱们就写上XRDDRDD,然后呢,给它来一个啊,咱们写上一个咱们的string,嗯。好,放过来啊,放过来以后,那你的这个地方就应该返回呀,所以把这个呢去掉啊,返回好了,这个文字性的描述咱们都不要了,因为这是咱们之前写过的代码,应该没什么问题,好好好拿过来,拿过来以后这个地方我们就先不要了啊OK,那我现在干嘛呢?把这个拷贝拷贝以后点啊咱们点点了以后呢,我们叫做不对啊,写错了啊,应该是加上一个括号,然后写上一个叫X他们的RDD给它传过去,传过去以后,然后呢,我们返回一个他对不对,诶返回一个他啊,所以呢,我们写上点,我们叫VR回车,回车以后这个咱们就叫top ten啊,就是它就行了。
04:29
但是大家想一想,其实呀,我们要这么多东西吗?咱们都不要,为啥呢?我只是看我们当前的那个ID在不在这个前十里面,不要这玩意干什么都没必要,对不对,虽以然我们只要在前十里面就行了,那所以啊,大家看一下我们这个地方呢,我们可以再来写个点,咱们叫做map,然后写个下划线,点下划线一对不对,你这么写完了以后,你会发现是不是只剩下string啊,那我们根本就不需要这些东西,不需要。
05:00
你要它干嘛,就是ID,这就够了,诶所以这样的话就会好多了,咱们叫top ten,咱们叫ids,对不对,诶这样的话就够了啊好,那我写完以后,接下来咱们要干嘛呢?我们准备来做判断了,什么判断呀,我们的XRDD,我刚才说过了,首先我要的是点击数据,你不是点击,那我就不要了,所以在我们的下面的这个位置啊,写上我们的一啊,咱们叫过滤咱们的原始数据。咱们的原始数据啊呃,我这里呢,加上一个cash吧,因为如果重复使用的话,这边效率还是希望能够提高一下的,咱们的cash啊好,那么我的过滤原始数据的情况下,我们写上保留啊来保留。呃,咱们写上叫保留,保留什么呢?保留前保留我们的点击和前十啊,咱们的品类的那个ID,哎,就是这样啊好,那我们这里就直接写了,因为我们现在呢,这个数据并不难嘛,所以说我们拷贝,拷贝以后呢,我写上一个点啊,咱们叫field,这个呢,我们的每一个咱们都拿过来,咱们叫做嗯,Action。
06:14
好放过来,首先第一个咱们的分解了,咱们叫dates,然后呢,等于action点我们的split。然后写上一个我们的下划线,哎,好,那么然后呢,我们这边写上,咱们叫date式,记住啊,我们看的是那个点击,这个点击,如果我们写上啊,干嘛呢,我们写上一周串,我们叫做负一,如果你不等于负一,我要留下来对不对,哎,就是这样,但是这只是其中的一个条件,所以我们首先先判断来写上啊,咱们叫if,你先满足这个条件啊,OK,如果你不满足这个条件,那还说啥呢,直接就干嘛呀,写个force我不要。啊,你先满足它是点击数据对不对,好,然后呢,你再来看看它在不在我们的这个集合里面,所以呢,我们拿过来,拿过来以后咱们点,我们看看它是不是在咱们的这个里面,所以来我们写个六,你的这个ID在不在它的里面,如果在你保留下来,所以这样的话,我们的数据剩的就不多了啊,所以field r DD,咱们叫f action r DD吧,所以啊,在这种情况下,我们把数据给它留了下来啊,那好,那如果留下来的情况下,那我们接着呢,就往下啊来啊好,那往下的情况下,我们想一想我们要干什么呢?他就说了,他说了是我们每个品类的top ten活跃session的统计,那是不是就意味着我要根据session来做统计呢?不行,因为你同一个用户的session可能点了不同的品类,对不对,诶那你这样统计可能就不准确。
07:56
去了,那我拿品类来做统计,那不行,因为你的一个品类可能有多个session来进行点击,所以说你的这个点击的统计应该是品类和session吧,对不对,同学们这个能不能明白,所以啊,也就意味着我们现在写上啊来将啊,我们说根据吧,根据我们的品类ID和DID进行啊,我们的点击量的统计,咱们叫点击量的统计,那这个就简单了,干嘛呢,把它的结构我们变一变,嗯。
08:30
点点了以后map啊,咱们的map这个map呢,写上一个action。好,放过来,放过来以后同学们看啊,我这个地方就直接别我们直接拿过来拷贝,拷贝以后我想干嘛呢,我就这么写了啊,来括号,括号以后我写上叫date,是我们说了点击应该品类是它对不对,然后还有一个是什么呢?是我们那个sessionon,那这个session我们得去确认一下了,来咱们回来,回来以后看看咱们数据的准备啊,数据的准备那个session ID好像是012,应该是我们的二吧,所以咱们叫date啊,应该给个二,然后写上一个我们的一。
09:13
这就说明我们的这个用户在这个品类上我点击了一次,对不对,诶做了一个map,那么好,那么我们现在就可以可以给他干嘛呢,叫做reduce by key。你现在写成下划线加下划线,那么点VAR回车,回车以后你的聚合结果叫reduce r DD就是它这样的话呢,我们的品类的ID和咱们session ID就已经聚合好了。那么你聚合好了以后,诶,大家看一下我们要的是它吗?不是,他要的是每一个我们的品类中包含了我们的top ten session,所以啊,它要把品类跟这个session要独立开,所以说咱们的下面写上三啊,来将我们统计的结果啊,进行结构的转换,那么你之前的统计结果是什么呢?你之前呢,其实就是我们的品类I,还有一个叫session ID,然后还有一个就是我们的some,哎,这是我们的统计结果,但是这个统计结果我们说了不是我想要的,我想要的是结构的变化,是把品类独立出来,品类咱们的ID,然后呢,再来写上一个session的ID,再加上一个some,对不对,我们应该是这个样子的啊好,那我现在呢,来咱们写上叫reduce r DD。
10:45
咱们点啊点了以后map,嗯,那这个map呢,加一个花括号,写上一个我们的模式匹配,那这里呢,写上一个叫cid啊,咱们叫cid,然后呢叫CID,好,还有一个sum,你想要的效果是什么?你想要的效果呢?来放过来,我们写个括号,我们叫cid,然后括号叫sid,然后呢,再来个some,诶,这就是你想要的结果了,对不对,所以啊,咱们写上啊,咱们叫map r DD,好吧,同学们,那我们现在呢,就得到了我们的这个结果对不对?同学们啊,那这个结果对于我们来讲啊,其实讲那个广告那个有点像啊,就是省份广告那个是不是很像,对不对,只不过咱们这里不是省份广告,是我们的品类和那个session,对不对?好了,那我现在呢,已经把咱们的这个品类和独立开了,独立开以后,那是不是相同的品类就应该放在一起了呀?
11:45
所以来我们写成啊,咱们写个四好,咱们叫做相同的品类啊,咱们应该什么呢?给它分在一个组当中啊,咱们叫做相同的品类,咱们叫进行分组啊,进行分组那好了,那么我们map的RDD点我们叫做group啊,咱们叫做by key,那这个时候呢,我们点一下VR回车,那么这个地方呢,我们就叫group啊,咱们的RDD。
12:12
好,那我们这么写完了以后,大家看一看来,那么我们分组之后,这个就是我们的品类ID,这个是我们分组之后的集合吧。那么这个时候大家会发现这个是session,这个是我们的那个数量,我们现在要的是什么?就是活跃session就是点击的统计,而且是top ten,它也是一个数量的排行吧。所以说来我们写上。五将啊,我们分组后的数据,分组后的数据进行啊,进行什么呢?嗯,我们的这个点击量啊的一个排序啊排序,然后取咱们的前十名啊好了,那我们的group r DD,咱们叫做点啊,点了以后这里我们写上咱们叫map values,因为我们key保持不变嘛,对不对,Key保持不变,那么我们这里对它的那个集合进行我们的操作,那么这个集合本身是不可能进行我们的操操作的嘛,所以来点我们叫做to list,点我们叫做salt啊,Sort by sort by或者sort with其实都可以,因为我们就要根据我们的来下划线,我们的数量来排序对不对,那么你数量排序的话,我们是点击多的在前,所以应该会有一个我们的降序的操作,对不对,同学们,所以来点。
13:37
我们叫做int.reverse好了,那这个时候我们点叫take啊,我们的前十,我们这个时候数据不就统计出来了吗?好,那我返回,返回以后这个就是我们的。好,同学们把这个呢拿过来,拿过来以后点我们叫做collect,诶我看看啊,咱们这个地方叫做collect,然后诶,我确认一下,咱们点V啊回车,回车以后,那我这个地方我觉得咱们是不是可以直接打印了,对不对,所以啊,咱们别这么写了,直接打印得了,点我们的for it直接print。
14:15
好了,那我现在呢,把这个代码就算是写完了,其实呀,如果咱们前面给大家讲的那个省份广告的那个小案例,同学们能够明白的话,这个需求非常的类似,只不过就是前面加了一个筛选的操作,对不对,诶就是这样啊好,那我们现在呢,这边给它运行看结果。好了同学们,我们的结果已经出来了,对不对,那么结果当中这边就是我们的这个操作了。
我来说两句