00:00
好,同学们,接下来我们给大家呢,把这个需求呢,咱们一块儿来做一下啊,那么这个需求呢,他是这么描述的,他说各个区域热门商品的top three,那么他这里呢,对需求做了一个简单的介绍,这里的热门商品是从点击量的维度来看的,在咱们之前学习Spark克的时候啊,其实那个用户行为数据呢,我们已经说过了,它里面分为什么下单呢,支付啊,点击啊,查询诶,不同的行为,那么我们在这里呢,只看点击,不看其他的啊,所以这里的热门商品呢,是从这个维度来看的啊,然后呢,计算各个区域前三大热门商品。也就是说啊,它有个排名,根据点击量来排名的话,那么点击数量越多的在前,越少的在后,对吧,应该是一个降序处理,然后呢,它这里面呢,是我们的什么前三,而且是以各个区域为单位,所以啊,每个区域应该放在独立的一个组当中,这是我们能够直接想到的,对吧?他说并备注上每个商品在主要城市当中的分布比例超过两个城市,用其他来显示,这句话是什么意思呢?就是让你在统计的过程当中,不仅仅是按照区域和商品来做统计,而且每个城市你还要做统计,这样的话就会显得稍微有点复杂,而且感觉上也无从入手,对不对,没关系。
01:26
咱们往下看,下面呢给了一张截图,这个截图当中就把我们想要的结果告诉你了。那么这里呢,首先有地区,有商品的名称,还有点击的次数和城市的备注,其实这里面主要要想做的就是一个点击量的一个什么统计,只不过呢,对不同的指标和维度呢,进行我们的什么哎,进行分析,所以啊,既然是我们点击量的话,那么我们三张表里面有一张表专门是跟点击量相关的,所以咱们回过去就是我们这张表叫用户的行为数据,用户的访问行为数据,其中就有个的概念啊,咱们叫点击的一个ID。
02:09
这个就是我们的点击的一个概念,对不对?那么点击的概念有了之后,那么咱们就以这张表为基础去访问就行了,但是你会发现它这里面呢,不光是我们的点击,还有包括我们的商品的名称,但是你会发现在咱们这里啊,只有一个点击的商品的ID,没有名称,所以你想获取名称的话,你得从商品的这个表当中把它的名称渠道对吧,有一个叫product name,所以这样的话,我们的两张表的数据就都关联在一起了,这张表和这张表对吧。还有一个除了我们的商品以外,还有一个叫地区,就是你当前的点击统计的这个操作呀,它里面所在的那个地区是什么?那么这时候你会发现呢,我们点击某一个商品的时候,其实并没有地区,但是它有城市,那么你城市所在的地区你是可以拿到的,所以这张表的city info也要跟我们当前的行为数据表做关联,所以啊,三张表你得关联在一起,那么关联在一起的话,这个咱们相信大家应该是比较熟悉了,对不对,有一个连接的概念,那好了,咱们现在呢,先准备写写蛇口纹啊。
03:22
呃,为了咱们写起来方便,咱们先不考虑啊,说在程序中如何写,咱们先直接写啊,比方说咱们写上select啊,来查询查询什么呀,你是不是想查询我们的一张表的数据啊,对不对?所以我们写上一个叫from,这个from呢,就把咱们的这张表拿过来,叫user visit action。这个呢,给他个别名A,因为它要关联我们的数据,对不对,那所以写个A点星啊,就是这个意思啊,表示所有的数据,但是我说过了,你光拿质量表的所有数据来做统计是不够的,我们还需要关联,所以join,这个join呢,应该关联咱们的质量表,应该是product info,所以把它拷贝,拷贝以后呢,我们给它一个咱们叫P啊,一个P表,那么join on它的关联条件,关联条件呢,就是我们的A点,因为咱们关心的是点击啊,所以click product ID,所以放过来,然后呢,它应该等于什么呢?应该等于咱们P点,应该有一个商品的ID吧,哎,就是它,所以拷贝,拷贝以后拿过来,但你要的是什么,你要的是它的名称啊,所以点一下咱们这里呢,会有一个叫product name,所以拷贝。
04:38
拷贝以后,我现在就把这个拿到了,对不对,拿到了以后,那么我们商品的名称有了,可是是你想要的吗?还不是因为我们还需要一个叫做区域的名称,所以来再写个join,哎,再写个join,然后呢,再写join的话,把那个city info给它拿过来,咱们拷贝,拷贝以后翻过来给个C表,那么JOIN2关联条件是A点是我们那个,呃,行为表当中有一个叫ctd,所以把这个拿过来,它应该等于我们城市表当中的那个CD,对不对?所以来拷贝,那么这样的话就有了,有了之后,那么我们现在需要的是什么呢?我们是不是需要一个我们的区域啊,对不对,咱们叫做一个区域叫area,其实还包括一个什么呢?C点叫city name啊,咱们得我我确认一下。
05:32
它应该叫city name,呃,为什么呢?因为啊,我们不光拿区域,我们后面呢,还是要根据我的城市呢,来把它的点击量做一个我们的比例来显示出来,对不对?所以啊,咱们这个城市咱们也是需要的,所以通过这种方式呢,我们把城市也给它拿到了啊,城市的名称以及它所在的区域啊,好了,那这个咱们拿到之后,那么这是一个最基本的数据了,但是它有个前提条件,他说了我们是从点击量的维度,那如果你不是点击的话,这个数据我们要它是没有意义的,所以咱们加个限定条件,叫做where,这个where呢,就是我们的它来拷贝。
06:10
拷贝以后,在咱们之前给大家讲18克时候就说过了,如果咱们点击的这个ID啊,它如果等于负一,表示的是它的数据,是不是点击,可是我就想要点击怎么办?那你就不是我们的这个负一呗,对不对啊,写个不等于啊,我们的负一就行了,或者说写个大于啊,这个都无所谓啊,咱们就是它,或者我写个大于吧,对不对,别负二负三也不合适啊,咱们有一个大于一个负一我觉得就可以了啊。好了,那你这么写完以后,你把所有的信息都拿到对不对,但是都拿到不行啊,因为我们这里它是需要分组的,相同的区应该分在一个组里面,而且相同的地区当中,它的商品要独立再去做统计,对不对,所以啊,咱们对于他来讲,咱们需要把这个当成一个查询的结果集来做操作,所以同学们看啊,来,我们写上,咱们叫做select啊,在这里,那么在这个地方的话,我们该怎么写呢?我们应该写上啊,我们看看来我们写上星,嗯,然后呢,写上一个叫from,然后写个括号。
07:16
这个括号里面应该就是它了,把它当成一个查询结果集对不对,嗯。好,放过来,放过来以后给它缩进一下啊,缩进一下,缩进完成以后,那么接下来干嘛呢?给它个别名叫T1,就是把我的查询结果当成一张临时的表,然后叫T1,然后select的星T1就行了,那么你这个查询星肯定不对,为什么呢?因为我不需要那么多呀,咱们只需要什么东西啊,咱们叫华北,华北是区域,而且相同的区域应该放在一块吧,所以呢,我们在后面呢,其实应该是有个什么操作的呢?咱们叫做group,嗯,咱们叫group by。啊,这呢,就是我们的area,就是我们的区域,那么你相同的区域放在一块儿,还有呢,你要对相同的商品名称进行统计,所以啊,咱们还得再来一个,这个再来啊,咱们来看看,咱们叫做product,嗯,咱们叫product name就是它了,嗯。
08:16
所以啊,根据先根据艾瑞区域来做分组,再根据商品的名称来做分组,那么这样的话呢,我们可以得到一些信息,比方说我们这里可以得到咱们的area是吧,没问题,还有一个就是我们的product name,诶我们的商品还有一个就是你要统计的数量,这个统计的数量我就写个count星吧,然后呢,给他一个我们的别名,咱们叫count,诶咱们就这么来写,你这么写了以后,那么其实是OK的啊。好了,那我现在这么写完了以后没有任何的问题啊,那么区域商品它的点击次数都有了,但是他说了我们要前三呢,就说明我在组内是需要什么呢?我们排序的,而且是以华北为单位,对不对,在这个组内我们要对商品进行排序,根据什么排,根据点击的数量排对不对,那所以啊,咱们在这边还得把它当成一个查询结果集来做,那所以呢,这里来咱们再写。
09:17
写上的话叫做select啊,然后呢,在这里我们写上一个星,嗯,好,然后呢,再来我们写上一个from OK,再来啊,写上一个T2,那么也就意味着把这个查询呢,当成一个查询结果集给它放进去,然后缩进一下。好了,你缩进以后,那么你要做哪些操作呢?对不对,那首先对于我们来讲的话,咱们这个T2呢,不需要额外的条件,我们只需要在组内排序就行了,你在组内排序的话,咱们这里有一个叫做什么呢?叫做rank对吧,有一个他嗯,然后呢,给他来一个我们的开窗操作啊,那么在这里呢,我们写上一个叫partition,咱们叫partition by。
10:00
那以什么什么就分组吧,咱们叫area,就是在这个区域当中来进行我们的排序,什么排序啊,咱们叫order by order by,这个order by呢,其实就是把咱们这个可Li count给他排个序,那这个排序呢,应该是什么?应该是我们的DSC,是不是降序啊,应该是降序啊,数量多的在前,数量小的在后嘛,嗯,好,然后呢,这个有个叫做S,我们的rank就可以了啊。那我们之所以这么做,是因为他要取前三嘛,那取前三的话,那我们现在呢,给他操作一遍不就完成了吗?啊好继续吧,那我们还得把这个作为一个查询结果集呀,所以我们再来select,嗯。在这里啊,咱们写上一个星,然后呢,再来啊from,然后写个括号,哎,括号写上一个T3,好,那把咱们前面的这个作为一个查询的结果集给它放过来啊,然后给它缩进一下,缩进缩进以后,那这个T3当中我们就可以来了,加上一个where,咱们叫做rank,嗯,咱们的rank它应该小于等于三对吧?嗯,前三名吧,嗯,当然也可能有重复的对不对,这个倒无所谓了,看你怎么去理解这个事情了,对吧?所以我们小于等于三就可以了啊。
11:17
好了,我现在呢,就把咱们的这个程序啊,就算是写完了啊,对不对呢,咱们也不知道,我们准备去验证一下啊呃,那我们现在想一想吧,怎么来验证一下呢,这样咱把这个呢,直接关掉,直接拷贝,拷贝以后写上一个一啊点击OK,前面啊咱们是把数据准备好了,现在呢,我们是准备来执行咱们的操作啊。来把这个去掉,我们写上啊,来,咱们叫做spark.circle嗯。然后写上啊,然后呢,在这里我们给它来,嗯,点我们的展示一下吧,嗯,好,那我现在呢,就把咱们刚才写的这一大堆东西啊,咱们拷贝一下啊,来拷贝,拷贝以后放到这里就可以了,首先啊,我们是一步一步来的,我们是从最里面把完整的数据给它取到,对不对?诶,关联两张表,然后呢,当有了数据之后,我们再给它进行分组操作,分组以后得到我聚合的数量,然后根据我数量进行排名,我们取前三个对不对,哎,就是这样的啊,所以这是我们的基本思路,好了,那我现在就来看一看吧,咱们这个结果有没有什么问题吧,嗯,OK,来,我们运行一下,点击右键。
12:34
好,同学们,我们现在的结果呢,现在已经出来了,同学们看是不是这样的是吧,你看我们这边就是华东华东华东啊,这是我们的相同的什么,我们的这个区域,然后呢,不同的商品按照它的点击数量进行排行,这不都对着呢嘛,对不对,哎,这样的话就可以了啊好了,那我们先做到这里。
我来说两句