00:00
继续做操作,哎,那接下来的操作其实也非常的类似啊,那就是排序输出嘛,我们得到这个result stream,然后在之前的这个AJSTEM基础上,接下来按照啊window and去做一个分组,对吧?哎,这个其实跟我们之前就是几乎就是一模一样啊,哎,那这里边我们还是用下划线这种方式,后面的那个类型稍微简单一点对吧?然后再做一个自定义的process function啊,这里边我定义这个叫做呃,Top n top pats,然后同样这里边比方说我传一个三,因为当前数据少一点嘛,给一个三,呃,提取当前这个TOP3就完事了啊,那后边我可以把这个result stream做一个控制台,做一个打印输出啊,那看大家具体怎么定义啊,最后大家不要忘记把这个执行起来就是,最后如果大家还是希望像刚之前的那种,呃,写成string啊,控制台有一个滚动输出,那我们还用那种方式就可以了,如果大家不想那么做的话。
01:00
啊,其实你直接去做一个,呃,就是得到那个I count,每个窗口输出也是可以的,对吧?这个是没有问题的啊,这是hot pages job,然后下边我们就是实现这个自定义的k process function了啊,当前我们这个叫top n hot pats,那当前这个还是我直接把它叫成N好了,对吧?然后extend k的process function,然后里边的类型大家还记得KIO对吧?当前的K应该已经因为已经定义成了这个下划线的形式,那无0AND是什么类型,这就是什么类型,所以当前的K是长整型,不是元组类型了,然后输入,哎,那是样例类类型配置account,对吧,输出是string。好,接下来我们做一个实现,必须要实现的是一个process element方法,哎,那前面我们要定义那个状态对吧,还是定一个例子的,我现在不在open生命周期里边定义了,大家知道有一种偷懒的方法。
02:00
Lazy lazy的方法对吧?它本来就叫懒加载lazy啊,我们这这样写好像也是一个偷懒的方法,把它定义出来,比方说当前我们知道呃,配置will count list state包,把它保存成一个list state,这里边我们要引入这个对应的这个包啊,然后里边的类型呢,直接就把这个page count存进来就完事了嘛,然后定义的时候是get runtime contact的,然后get list state对吧,里边传一个list state的一个描述器,哎呀,这里边我们又应该要把这个写出来啊,List script里边呢,给一个名称,当前这个叫page,呃,View count list对吧?啊,那另外还有一个class of当前的类型page view count传进去,这就是一个完整的类型定义,大家如果已经比较熟的话,尽管有点长啊,一长串,但其实。
03:00
跟我们之前定义那个value state也是一样的,对吧?哎,只不过就是变成了一个list子而已,那接下来在process element里面呢,还是每来一条数据,我就直接把它ADD到当前的这个例子里边来,另外记得注册一个定时器对吧?啊,那当前的这个是一个even文弹timer,我这里边注册定时器呢,还是以当前的这个window end再加一毫秒,但是大家也知道你这个不加也可以,对吧?诶你这里边这个本身到这个点的时候,正常情况下就可以正常输出了嘛,呃,这个是可以做这样的一个选择的啊,我们这里边还是给大家加加上一毫秒,然后另外就是最关键的,真正到点的时候,我们现在做排序输出啊,那这里边其实还是把所有数据都拿出来,然后做一个输出就完事儿了啊,那这里边我把这个就是当前的这个数据啊,还是另外的定一个r page view counts。
04:00
对吧,定义这样的一个一个LIST4BUFFER,我们就类似于之前的这种定义方法啊,List buffer把这些引入,然后里边的数籍类型是配出count啊,首先我们把这个空的LIST48本先创建出来,然后后边大家还记得,哎,那就是一个有迭代器对吧,把这个迭代器拿到啊,当前的这个page list state get,然后接下来就是一个well循环便历啊,比方说我们当前如果它还有这个next的话,我就直接把当前的这个值添加到当前这个list buffer里边来,对吧?呃,做这样的一个转换,呃,这个enter.next啊,这个非常简单的一个便利数据啊,然后把它做一个保存的这个形式,然后另外我们可以提前清空状态了,对吧?提前清空状态好,先做一个这个操作啊,然后这里边。
05:00
我们直接把这个page will count list state clear啊,接下来就是排序对吧?按照访问量排序并输出top n,好,那这里边我们第一个定一个saled page,呃,View counts,它就应该是基于之前的all page view counts去做一个thought by或者thought with,之前我们用了thought by,那现在我们用个with吧,啊,换一样对吧?大家知道这个如果用这个thought with的话,那其实要传一个返回值,是布尔类型的一个函数,对吧?那这里边我们可以用下划线的形式把这个只出现一次的参数做一个替代,哎,那我们这里面其实就是当前的count,如果要大于另外一个数的count的话,哎,这个就是返回处,对吧?这里边就是按照从大到小的格式把它做一个。
06:00
呃,做一个排序,那后边我们直接take n,把它拿出来就完事了啊,这是我们这个具体的一个操作,但是大家如果还想把它定义成那个输出成的一个字符串的话,我们可以借鉴之前已经实现过的这一个字符串,这个这个过程对吧?诶我直接把这个copy过来啊,然后诶把这个time引入这里边我们就稍微的改吧改吧,哎,比方说这里边窗口结束时间,那还是这个减一对吧,Time Sam减一,然后这里边呢,我们这个叫做saled page view counts sal page views这里边啊,我这个还叫car item都没有关系对吧?Item大家知道是项目的意思嘛,这个其实没关系的啊,这里边就不是item ID了,而是URL,对吧?这是不是商品ID啊,这是页面URL啊,然后这个热门度,那后面还是把这个count输出直接这么一粘过来运行。
07:00
就可以了,好,我们整个的这个处理流程跟之前差不多,然后我们看一看啊运行结果怎么样,我们来看一下这里的输出结果,诶大家看这就是我们这个跟之前一样的这种定义对吧?哎,现在只不过这个输出频率就高多了啊,这是每隔五秒钟我们就输出一次,哎,大家看这里边这个热门度啊,就TOP3做了一个输出,做了一个提取啊,当然如果细心的同学会发现,你如果直接不做任何筛选,我们直接给一个这样的一个输出的话,你会发现大部分的这个页面啊,最多的应该是什么呀?应该是一些资源文件的访问对吧?哎,大家看都是什么CSS啊,都是Su大家知道的那个I孔那个图标文件,对吧,都是类似于这样,或者说还有一些这个HTML之类的这些资源文件,那如果说我们实际访问的时候,可能要把这些滤掉,对吧?啊,那怎么做处理呢?这里可以给大家稍微的说一下,就是我们代码里边有这个实现,大家看前面可以加入一个一个filter对吧,写一个。
08:00
正则去做一个做一个这个筛选不就完了吗?啊,这个正则大家看一下,这是表示什么呢?前面这个问号感叹号啊,它是所谓的一个非捕获元字符对吧?就相当于它是做一做一个反向匹配,就是不以这个接下来我定义好的这个东西,开头的这些这些,呃对应的这个字字符串就可以匹配的,匹配的起,呃匹配到我们的这个要求的这个数据里边啊所以接下来我要的是什么呢?是不以,而且后面我们看有Dollar符,这是不以这个结尾对吧?啊这里边我写的是不以CSS和JS结尾的当前的这个,呃,所有的这个拿出来,然后呢?呃,开头后边是任意字符串,然后结尾,对吧?呃,就是你如果加了这个的话,我们后边就会把这些CSS和JS过滤掉,如果你要加上比方说ICU对吧,这个icon图标文件也滤掉,你再加一个把这个正则补全就可以了,大家可以下来之后试一试啊,那后面写。
09:00
的时候呢,我返回了这个,呃,波尔类型的这个应该是什么,怎么样一个判断呢?直接用当前这个pattern,我们正责对吧,Find first in data URL啊,如果这里边还用的还是URL,对吧,我们现在啊,啊是是URL对吧,就是直接把这个URL里边做一个正则匹配,然后能empty对吧?如果要是说我们拿出来的是有数的,没有被它这个过滤掉的话,那我们直接就走到下面这个流程里面来做统计,如果说如果说它是以这个两个结尾的话,被绿掉了,那那就算了,对吧,那我们直接就不做统计了,呃,这就是关于这个当前热门页面的一个统计。
我来说两句