00:00
好了,同学们那么简单的介绍了一下三的概念啊,这个我们后面还会详细的讲,那么接下来我们把这个小功能呢,我们一块儿来看一看啊呃,第一个小功能呢,嗯,咱们刚才做过了吧。那我们看第二个啊,第二个是从我们服务器日志数据当中,阿帕奇中啊获取每个时间段啊的一个访问量,说的简单点啊,这个时间段啊就作为一个分组的标记啊,他说放个它是获取每个时间段的访问量,那么来条数据,诶我们看时间段,来一条数据看时间段,那这样的话统计一下不就可以了吗?对不对,哎,就是这样啊,那我们来看一看吧,把这个呢,我们给它关掉啊,咱们来看这个一个小练习啊,嗯。好,然后呢,我们写上啊,咱们叫做嗯,哎,不对,还是六啊还是六,咱们这个写上一个咱们的test,好小练习点击OK。好了,那首先把这个呢,我们去掉啊,去掉咱们写上叫做RDD,它等于sc.text file,然后呢,叫date是阿帕起点lock,嗯,就是这么写的,然后RDD点,诶我先确定一下啊,咱们回过头来,咱们打开,打开以后它这里面先把这两个删掉啊,咱们先不要给它delete,嗯,然后回过头点击这个叫date啊,有个阿帕,然后呢,他说的所谓的时间段啊,其实就是我们的这个啊,比方说十点到11点之间是吧,我们的访问量,11点到12点之间的访问量,他这里只是强调了时间段,其实没有强调那个日期的啊,他没有说啊,我们在,呃,今天是吧,我们的时点到11点,他可能统计的是什么呢?比方说一个月啊,一周,比方说我们这一个月当中,我们的这个中午的时间段,我们点击的这个网页平均是有多少的,对吧,所以说这种东西我们就不强调这个日期了啊,那我们这里呢,就强调这个时间段,所以我们只要把这个取出来,那我来统计就。
01:59
可以了,对吧,为什么呢?因为我们这个时间呢,它是从我们的,嗯嗯23对不对,就是我们的零点到23嘛,那所以呢,你要把这个单独取出来是没有问题的啊嗯。
02:10
那如果是单独取出来的话,那我看怎么取呢?其实首先还是分解吧,分解以后012对不对,那这是几样三,所以说我们来写上咱们叫做嗯,Map,然后呢,把我们的一行数据给它拆分开点我们的split给它一个空格,然后呢写上叫dates,然后呢,我们写上它,呃,我们叫做嗯时间对吧,咱们叫做时间,咱们叫the date啊然后呢,我们写上一个三,所以啊,你先把这个拿到,拿到以后,但是我们说了,你这个我们是不需要的呀,啊什么意思,你前面的我们是不需要的,那你不需要的情况下,你只需要它就够了,那这个我们怎么取啊,其实这个取啊,你要看一看,首先咱们数据当中的这个格式啊,它是不是什么相同的,如果日期的格式是相同的话,你完全可以按照字符串的方式去截取,这是没有问题的。比方说来。
03:07
你这个time啊,咱们点咱们叫做什么呢?Subst string,对吧,比方说写上一个零,然后呢,它到一个我们的位置对不对,或者说到哪个位置,所以啊,也就说你可以根据这种方式来获取对不对,这是没有问题的,还有一种就是格式化啊,直接取到,像咱们大家应该学过,有个SDF等于一个new,咱们。我D斜杠M,所以呢,我们来写上它,嗯。你这么写了以后,大家想想啊,哎,咱们是这样的,来你把这个拿过来,所以咱们的字符串啊,咱们的字符串大家想想其实是不是就这样的一个格式,那你这个格式的话,你把它给它分解一下,变成日期,再取出它的那个小时时间段行不行,你把这个取出来是不是可以啊,所以大家看一下啊,来咱们写上,呃,咱们叫做什么呢?我们的new date啊,OK,然后呢,诶我先不写这个吧,SDF点我们这里呢,再给它解析解析咱们的time的它对不对,那这样的话呢,点我们叫VR回车,哎,这是我们得到了一个date,那么这个date呀,我们点它里面就有什么东西啊,叫get our对不对,哎,就是这样的,可以获取我们的小时对不对,诶是这样,或者或者还可以干嘛呢?你把咱们的。
04:38
就是嗯,再给它格式化一下,其实也行啊,但这样会稍微显得有点麻烦了啊,所以来拷贝,拷贝以后放过来,比方说写个一,然后呢,你把这个日期干嘛呢?你只保留什么我们的小时就可以了,所以呢,这个时候呢,我们再来啊,给它拿过来,我们点我们叫做什么呢?我们的format,把那个日咱们传进去,传进去以后点VR回,你拿到的就是那个时间,诶就是我们的时间段,但是我们要的是时间段吗?不是,对不对,我们要的是什么?咱们要的是它要计算的一个点击的量啊,所以我们写上叫R1,表示的是这个时间点它出现了一次,每来一行出现一次,每来一行出现一次,那么我们最终点我们叫reduce by key对吧,诶就是行了,然后呢,我们写上下划线,诶这么写,但你这么写的话,其实用的不是我们的什么group,对不对,所以呢,来大家看一下,我们写上一个叫group。
05:36
你这么写了以后,大家看一下我干嘛呀,把相同的是不是可以放在一起啊,下划线点咱们叫下划线一,这样的话,相同的时间不就放在一起了吗?然后呢,我们再来我们的点叫VAR回车,所以大家可以看到你现在啊,其实就把这个时间就拿到了,那你拿到以后,这个就是相同的时间所形成的一个集合呀,对不对,所以啊,咱们写上叫time r DD,然后呢,把它拿过来,拿过来以后点我们map,记住我们要的不是它的那个迭代器,我们要的是什么,它的那个数量,所以我们要转换一下它的操作,这里咱们用模式匹配咱们的case啊,咱们的case我们传过来的是一个time,一个是吧,一个我们的小时,再加上一个咱们的集合,但是我要的不是,咱们要的是什么?我们的hour,然后呢,点我们的迭代器的长度,所以点我们的S。
06:35
那这样的话呢,我们最终就得到了咱们的结果啊,所以我就直接来吧,咱们在这里点叫collect,点我们写上啊,咱们点叫做for it,然后写上一个叫print,哎,这么写就OK了啊行了,咱们试一试啊,咱们运行一下,嗯,其实有很多种方式可以实现这样的功能啊,你什么格式化呀,截取字符串啊,对不对都可以啊,但是有个前提条件呢,就是你的那个字符串,它的那个呃,格式啊是统一的,那你别每个字符串不一样,对吧,也不行,嗯。
07:08
好了,大家可以看到,在我们当前的这个地方,不同的时间段呢,它的这个点击的数量就被统一下来了,当然了,你要想排序啊,那就是你自己想做的事情了,我们这里就不做了,那好,反过来来讲,同学们想想,那你如果把这个our当成一个word叫单词,那其实这个功能是不是就是我们之前所写的那个叫word count呀,没问题吧,同学们,所以在课件当中就告诉你了,其实它是能够做word count的,咱们的group by是可以做count的,没有问题啊,它是一个独立的一个算子,当你做分组之后,我们可以想别的办法做一些聚合,不见得非得用什么reduce by key这样的东西,对不对?你拿这个group也是可以做到的啊,好了。
我来说两句