00:00
接下来给大家讲一下需求三啊,最近一小时广告点击量的统计,那么这个广告点击量的统计啊,它从不同的维度来讲呢,其实可能啊是一个广告啊,我们最近一小时它的点击量的一个走向和趋势啊,或者呢,是多个广告在这一个小时之内,他们的一个呃,对比关系,这个其实啊,在我们的生活当中会经常碰见这种什么柱状图,饼状图,什么折线图啊,用这种图形来展示咱们数据的关系是这样的啊,像咱们这就做的简单一点吧,咱们就是某一个广告在这最近这一个小时之内,它的点击的趋势,那么这种图形啊,咱们大家看一看啊,咱们这里可以简单去找一找。呃,在咱们的这个工具当中啊,有这么一个曲线图啊,咱们来找一找,嗯,咱们看一看在这儿啊来,嗯。在这个地方有一个我们的,咱们叫折线图对吧,叫折线图,其实呢,我们这还有一个柱状图,这个柱状图当中大家可以看到它有高有矮吧,那这个其实完全就可以是多个广告,但是如果就一个广告的话,那么我们可能啊,用这个就更加合适一些啊,表述的是在一个小时之内啊,它的一个走向,一个趋势啊,那这个呢,我们可以简单的画一画,比方说他不说了嘛,是我们的一个小时嘛,那比方说现在是12点,对吧,现在12点,那么12点到我们的这个一点啊,到咱们的一点,这不就一个小时嘛,但是一个小时啊有点问题,你不可能在整个图形当中就显示两个点的数据,不可能吧,所以说你可能需要什么呢?比方说我们的20分钟啊,咱们举个例子啊,或者咱们嗯,就20分钟吧,20分钟啊,然后呢,这里呢,来拷贝来拷贝,拷贝以后呢,这样是我们的事实,那这样的话呢,我们就有这么几个点位存在啊,然后呢,我们的这个地方,呃,比方说我们的箭头,哎,咱们的12:20呢,就指向了咱们的。
01:50
的这个位置对吧?好,然后利用一个虚线,用一个颜色红色来表示一下,那么同样道理,我们再来拷贝,拷贝以后呢,我们12点,我们的事实,嗯,好把这个拿过来,然后呢,我们再来拷贝,拷贝以后呢,我们的13点,所以大家可以看到这个呢,就是我们的一个趋势啊,咱们就可以从这儿诶到这儿再往上再往下,我们就知道在12:40的时候啊,就这个时间段之内,我们的这个点击量非常的高,那我们随着时间的推移呢,点击量就下降了,所以啊,看这个图形对于我们用户的一些决策呢,其实是有帮助的啊,所以我们接下来呢,咱们就要做这样的一个功能,它就是最近一个小时之内某一个广告的点击量啊,当然了,我说了你多个广告也可以嘛,就是那个柱状图也没问题啊,那好,那我们现在啊,我们假设同学们看一下,因为在我们当前的程序当中,其实我们可能更关心的是我们这个图形怎么展现出来,那么你观察一下这个图形当中,其实你只需要知道它的时间点位。
02:50
和它的一个什么数量就可以了吧,别的你可能不关心,所以在这种情况下,咱们观察下来,嗯。比方说现在我来一条数据啊,比方说现在呢,我来一条数据,那来一条数据的,我说了我不关心啊,你到底是什么呢?就是哪一个什么,呃,区域啊,还有城市呀,还有我们的用户啊,包括什么我都不是关心,我只关心是某一个广告,某个时间点过来的一个点击数据,对不对,那咱们说了啊,咱们现在就监控某一个广告,那咱们举个例子吧,比方说咱们是同一个广告,那我现在是12.01对不对,我十二点零一来的,然后呢,再来啊,我们还有个12.02,诶好了,然后呢,我们再来干嘛呢?我们写上叫12点啊,比方说我们的12,诶好,然后呢,再来我们写上啊,咱们放到这边。
03:37
咱们写上22,嗯,好,然后呢,再往这边啊,我们写上咱们叫做25。好,再来往下啊,往下诶,咱们写上30,嗯,写上个30。好了,写着放这边,然后呢,同样道理,我们这边呢,写上咱们的32 33,诶好,然后呢,36放过来啊36我们这体现的是数据在源源不断的过来,对吧?诶然后呢,放到这边,我们写上咱们叫41啊41,然后呢,再来我们写上呢,叫49,嗯,49,然后呢,55,哎,翻过来,咱们的55翻过来啊,然后呢,这边呢,写上56,哎56OK,然后呢,写成它这就可以了,你这么写完以后,现在呢,就是我们的数据,记住啊,它不是连续的,它就是诶一会来一个,一会来一个,时间点是不确定的,那么在这种情况下,我们如何把这样的数据展示成这样的一种图表呢?哎,我们说了,那就要看我们的规则了。
04:32
咱们的规则呢,就是从12点到我们的13点对不对,哎就是这样好了,那我现在就要想办法了,12.01我应该在哪个点位上面对不对,12点12:20 12:40 12:30对不对啊胡老师13点,那么在这种情况下,大家会发现你的这个12.01啊,就有可能是放在这个位置对不对,哎就把它给它复制一下,咱们放到这个位置。好了,那你放这个位置的话,那你12.02呢,是不是也放这个位置啊,诶也放这个位置,诶所以咱们放到这边啊,放这边,然后呢,我们再来咱们的12点,我们的12,诶咱们也放到这个位置就行了啊,我们简单的一个规则吧,就是我们12点到12:20之间的数据都放在这个位置,12:20呢,到12:40之间都放这个位置,12:40呢,到12~13点呢都放这个位置,所以这样的话呢,有个简单的规则之后来放过来12:25,然后呢,给他放过来啊,然后呢,12:30,哎,30放过来。
05:30
30翻过来以后,然后呢,我们的33,还有我们的36,哎,这个都属于我们的这个点位啊,然后呢,那接下来呢,我们的41,那41呢,就在这个位置上了,对吧?然后呢,我们的49,然后呢,来翻过来,咱们这里呢55,嗯,把它翻过来啊,翻过来然后呢,我们这里是12:56,对吧?然后呢,我们一点之后,这边就没什么数据了,咱们就不管它了,所以呢,我现在呢,就把咱们这个数据啊给大家稍微的咱们准备了一下,那如果你要是这样的话,那是不是就意味着我们的图形就可以这么画了,哎,到这儿,然后再到这儿,再到这儿啊,所以这个不也算咱们的折线图吗?
06:06
所以啊,我们现在就要把数据变成我们这个样子,就是你的12.01的数据,我们应该想办法给它变到这个东西,同样道理,12.02要放过来,然后呢,12:12也要放过来,那么12:22呢就放这儿来了,所以呢,就要把12:22变成12:20,把12.01变成12点,对吧?那这样的话呢,我们做统计就没有问题,所以啊,说白了就是把咱们当前的数据呢给它变一变啊,变成我们下面的这些点位就可以了啊,那我们该如何实现这个功能呢?我们给大家来看一看啊来。首先我们这里呢,就写上咱们叫13啊,咱们叫REQUIREMENT3,嗯,好了,然后呢,点击OK啊,我们放这里,放这里之后呢,我来观察一下,这个咱们保持不变,那么我们接着呢,就把这个全去掉啊,全去掉就可以了。好,那我去掉以后呢,我刚才说过了,我们现在想干什么呢?我们现在其实拿到的就是我们的时间,但是我们的时间呢,我们需要这样,比方说我们的12.01,对吧,十二零一我要变成什么,要变成12.00或那或者呢,干嘛呢,我们写上12点啊,咱们的十分,咱们要变成我们的12点,诶我们这个11吧,嗯,对了,还有一个问题,什么问题呢?我们现在这个点位太少了,比方说我们刚才看那个图,咱们现在就四个点位,这个图形中点位太少啊,这个图形就比较简单,所以我希望这个点位多一些,而且呢,最近这一个小时咱们也没法给大家演示,所以呢,我们这里啊做这么一个功能吧,嗯,咱们叫做最近啊,咱们叫最近一分钟啊,最近一分钟,然后呢,每十秒诶每十秒诶,我们说计算一次,咱们叫计算一次,咱做这么一个功能,那么最近一分钟的话,那么每十秒的话,那么我们应该是大家看十二幺二。
07:56
幺幺是不应该就变成1210了,对不对,诶它应该就变成1210,同样道理,你的12呢幺九,诶按照我们之前的规则呢,也是十二幺零,对不对,然后呢,到了十二二十五了,那么这个时候呢,我们变成十二二十就可以了,还有一个就是我们12,然后呢是59,那59的话,我们也变成十二五零就可以,所以啊,我们就希望呢,把这样的时间点的数据呢,给它变成我们现在的这个样子,你变成他以后,那么十二幺二幺零,1210他们就放在一块儿来做统计,那么20205050他们的数据就挨个做统计就可以了。
08:34
所以啊,我们就要想办法变成它,哎,那这个怎么变呢。咱们假设这是12分一秒,12分11秒,12分19秒,怎么就变成12分12分十秒,三分十秒呢,对不对,这个怎么变呢。哎,这个如果大家不会变没关系,为什么呢?因为大家想一想,咱们举个例子啊,咱们举个例子,举个什么例子呢?55想变成50怎么变。还有如果你现在是什呢?49,你想变成40,你怎么变?
09:04
然后呢,再来我们写上什么呢?32想变成30怎么变,大家想想跟这个是不是感觉差不多,你55把后面那个东西我不要了,是不是就剩下我们的50了,对不对?大家看一下,那么你把这个幺去了,是不是就12点,那么我们的12分这个东西了,同样道理,你这个幺幺,你把这个幺去了是不是就是零了,所以跟这个感觉是不非常类似,那我们该怎么办呀?大家想想有没有什么办法,有怎么办呢?咱们的55如果它除以十,再乘以十是多少?大家想想,记住啊,咱们这是一个整形数据的计算,而不是小数点了,所以呢,它不可能有那个小数点的概念,那么五数除以十虽应该是五啊,五乘以十是不是就是50能明白吗?同学们,同样道理,49如果它除以十再乘以十的情况下,那是不是就是40呀?还有我们的32,它如果能够除以十再乘以十的话,是不是就是30能明白同学们,所以啊,我们想要把它的尾数去掉,其实就用这种方式就可以了啊,那同样道理,这个能明白的话,这个你能不能明白?你应该能明白吧,为什么?因为咱们其实真正拿到的是不是时间戳,你拿到时间戳本身就是数字吧,那么你把数字进行截取之后,再给它乘以相应的数是不是就可以了,同学们?
10:26
所以啊,咱们这个思路就非常简单,大家看一下啊,来,咱们来,我现在呢,就写上一个点,然后写上一个我们的嗯,Map,这个map呢,给他来一个啊给他来,我们写上一个date,嗯,OK,然后呢,放到这个地方,我要干什么呢?我们写上咱们的date点咱们那个叫TS,那点too long,诶,Too long这个呢,就是我们的时间戳啊,咱们叫TS就是它了。那你这个时间戳,你要干什么呢?首先第一个它是以毫秒为单位的,我先除以什么呢?以1000,这样的话,我得到的是秒,对不对,但是你会发现咱们这个尾数,这个秒是不要的,咱们只要十位上的吧,所以我们再除以十,那说白了就是1万,哎,你这么除,你除以它以后,你再乘以1万,对吧,或者你不乘以1万其实也行啊,但我们乘以1万是一个完整的嘛,对不对,所以呢,我们再来给他乘以1万,诶你这么写完以后,其实就跟这个是完全一致的了,大家想是不是这样的,所以啊,这个是我们的一个真正的那个,诶需要计算的节点啊,所以我们就叫做news吧,好不好,咱们叫new ts,诶你这么写就行了,那你这么写了以后,那咱们的这个叫new ts,咱们的这边写上一个一不就行了吗?行了以后点我们叫做reduce by key,相同的时间点位,它的a value相加,那这样的话呢,我就可以获。
11:53
取它相应的数据就行了,但是啊,同学们有一个问题,有一个什么问题呢?咱们回过头来看,在咱们之前给大家描述的过程中,我们说了咱们这个地方呀,是12点到1.1个小时,对不对?但是如果是每过20分钟的话,你这个时间点是不是该移位呀,对不对?他该移了吧,它要移位的话,是不是这就变成12.00了,对不对,12:40,十二一一点八,那我们后面这个地方是应该是01:20啊对不对?所以说你会发现每隔20分钟的话,那我们这是应该数据会发生变化,但是这个大小呢,还是一个小时,对不对?
12:29
所以啊,我回过头来,咱们刚才说过了,咱们这是呢,最近一分钟每十秒计算一次,就意味着每过十秒重新计算,每过十秒重新计算,那这是不是有一个窗口的滑动的概念,所以啊,咱们这里直接用它是不对的,为什么呢?因为我们有个窗口滑动的概念啊飞来我们说我们指出啊来这里咱们涉及咱们叫涉及叫窗口的计算,诶那如果窗口计算的话,那我这里应该是reduce by key什么呢?叫and window I and window,那么首先你该如何做计算,这第一个,第二个就是我们的窗口的范围,咱们叫second啊咱们叫second好,写完之后我们一分钟吧,啊一分钟,一分钟就是60,然后呢,我们再来,咱们叫second啊,咱们的second,嗯,好,那么我们现在呢,是每十秒的话,那么我们就写个十倍,但是有问题啊,同学们,我们这个60。
13:30
那这个十我们是应该怎么办?是不是应该跟我们前面的采集周期要统一呀,你这就不对了,因为我们60呢,是它的整数倍,但这个十不是吧,所以我们这里给他个五啊,咱们给他个五是可以的啊,嗯,好了。然后写完以后,它这里标成一个红色啊,就说明它这没有动态识别,没有动态识别这个简单呢,咱们直接来啊,咱们写上一个Y,然后呢,给它一个咱们的一个叫做什么呢?减括号,嗯,咱们叫X加Y,然后这里面呢,给他一个我们的int,嗯,给他一个我们的Y啊,咱们的in。
14:04
好了,我现在呢,就把这个做完了啊,这个做完了以后呢,我们得到的结果呢,就是我聚合后的结果,所以呢,我们这里呢,给它来啊,咱们叫做嗯reduce DS啊DS等于它就可以了,好,那我现在呢,把它打印出来,这就是我们想要的功能啊。好了,同学们,我们现在呢,给大家生产一下数据吧,因为这个数据啊,我们一直在生产,它会有一些积压呀,啊,我们先不管它,咱们先给它生产啊,生产之后我们在这里呢,再给他来进行我们的操作,看一看我们能不能够把我们的这个数据给它生产出来啊。好,那我们现在呢,就直接开始吧,那咱们直接来吧,嗯,运行咱们稍等一下啊。好同学们,现在呢,我们这个数据呢,已经出来了,他在慢慢的累加啊,在慢慢的累加,然后呢,这个数据啊,基本上现在就都有了啊,都有了以后就可以了啊,哎呀,但是我这有问题啊,什么问题呢,咱们这个数据啊,这样啊,咱把这个先停了。
15:04
既然停了以后,为什么要停呢?是因为啊,咱们的这个地方来等疼不疼啊,我们的生产数据的时候,它是一个固定的山石,所以这样的话就会导致啊,它的每一次采集周期的数据量应该是一样的,所以啊,我们这儿给他拉一个吧。咱们拷贝啊,就这个数是不确定的啊,比方说给个50啊,给个五十来咱们这么来啊好了,那我现在呢这边呢,我们看看啊,咱们这边现在的数据呢,还在有历史一些数据遗留的数据啊,咱们可以看一看,呃,其实啊,我们现在呢,功能上已经算是完成了啊,所谓的完成呢,就是因为我们在当前呢,已经把咱们的这个数据时间点位给它加上了啊嗯,结果,但是我们看不出什么效果来啊,但是我们确实这个数据上本身是没有问题的啊好,咱们先停一下。
我来说两句