开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第二阶段):网站流量日志分析--数据预处理--点击流模型 visit 代码实现】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/694/detail/12196
网站流量日志分析--数据预处理--点击流模型 visit 代码实现
内容介绍:
一、代码实现
二、运行效果
三、总结梳理
一、代码实现
明确了编程实现思路之后,接下来确定代码层面如何具体实现,打开编译器的 visit模型。
1.整体流程
首先写一个类叫做 ClickStreamvisit,这里面就是处理数据的矮码核心逻辑,第一步确定map阶段,根据画谱知道在map阶段,没有进行任何核心的操作,也就是读取一行记录把里面的 session 提出来之后,key把这一行记录分装成 pageview 作为 V传递出去即可。代码非常简单,读取一行后将其转为字符串,然后按照\001进行切割,所以数据当中也是\001不可见分隔符,切完之后,需要进行解释,把里面具体的每一个字段保存在 pvBean 中,key叫做 pvBean getSession,也就是把会话当中的key,v就是 pageviewsBean,整体逻辑和画图板没有任何区别。
在map阶段没有去做任何具体的操作,经过map之后来到reduce阶段,reduce所接触到的大量的key和V,它们的key都是 session,V就是 pageviewsBean。
2.具体逻辑的实现
首先还是在同一组当中,把这一组所有的对象 pageviewsBean 创建在集合当中,先定义一个Array集合,里面保存的是 pageviewsBean,它的数据来自于这一组迭代器当中,所有对象把它迭代出来,通过对象的复制将它添加到集合当中,添加完成之后,针对这个集合进行排序,通过画谱知道排序现在有两种选择,既可以按照时间正序排序,也可以按照步骤号排序,因为步骤号的顺序就是访问时间的证据,这里直接以步骤号来进行排序。把集合放在 collection.sort 当中的时候,用了comparable 重写它的方法,然后get两个步骤当中的步骤号。规则是o1的step是否大于o2d step,
因为步骤号是一个基本数据类型,所以可以直接来判断,如果大于,做一个三元运算返回1,否则的话返回-1,comparable 方法是根据正数负数零来判断的,如果大于返回的是正数,小于返回负数,相等为0,这样就完成了根据步骤号进行排序,当然也可以继续按照获取时间进行排序,方法是大同小异的。
排序完成之后就比较简单了,去创建一个 visitBean,就是最终需要输送类型,在这个问题当中,确定了以下需要输出的数据类型,包括会话 session、属于哪个用户的IP、然后进入时间 intime、离开时间 outtime、进入页面 inpage、离开页面outpage,来自哪里 referal 以及最后一个 pageVisits,在一个会话话当中总共的访问界面,也就是画谱中所说的 total pages,单词的属性名字不一样,但描述的意思是一样的,即一个会话总共访问了几个页面。
确定了这些数据之后,注意不要忘了它的rival序列化机制,在刚才的几个当中get0,提前第一个页面作为进入页面,第一条时间作为进入时间,最后一条时间、最后一个的页面作为离开的时间和离开的页面,总共访问了几个页面,就是集合的size。
同一个会话的记录一定来到同一组中,同一组一定保存在同一个集合当中,size 为一,一个会话就有一条,size为2就是两条记录,这样把数据直接写出即可,最后发现计算非常方便.下面是main方法,全都是模板代码,主要是指定map、reduce以及输入输出路径,这时要注意根据画谱知道V的模型数据来自于pageviews模型数据,所以此时的输入路径应该是上一个代码程序的输出路径。
二、运行效果
打开本地模式,上一个输出路径为 pageviews,把这个路径作为输入复制到这里,设置为它的 input pass,输入进后可以单独写一个,右键运行来执行,这时候是用本地模式来运行的,计算的速度将会非常的快,因为数据量比较小,当然数据量大的时候,一定要把程序打架包放在样机上,采用分布式来进行计算。
处理完之后打开本地的输出路径来看一下V的目录结果,当中 success 标识计算是成功的,右键打开一下这个数据,这时会发现当中就没有重复的session了,因为根据 session 进行聚合,不管同一个会话有几条记录都聚集为一条记录,当中属于会话的功能it进入时间、离开时间、进入页面、离开页面,可以看到有的在一其中访问了三步,有的访问了一步,有的可能访问两步,这样对于后面计算一些指标将会显得非常的方便,这就是点击流visit的模型。
三、总结梳理
回到画谱中梳理 visit 的模型,visit 模型专注于每次会话内起始结束的访问情况,为此就要需要找到同一个会话的所有记录,只拿第一条和只拿最后一条,第一条的相关信息,就是它的起始信息,最后一条的信息,就是它的结束信息,这两个模型就构成了所谓的点击的模型,再次强调一点,不管是 pageviews 模型,还是visit的模型,它都不是客观存在的模型,完全是一套业务理论模型,是由一些业务指标堆积而成的,它的存在就是为了计算某些指标的方便。