开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第二阶段):网站流量日志分析--数据预处理--点击流模型 visit 编程实现思路】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/694/detail/12195
网站流量日志分析--数据预处理--点击流模型 visit 编程实现思路
内容介绍:
一、概述
二、思路及说明
三、逻辑梳理
四、总结
一、概述
下面来看点击流模型visit模型的具体实现,结合刚才所画的思路图来看一下如何通过代码具体实现,为了更地理解首先画图进行梳理,确定实现思路。
二、思路及说明
1.思路图
打开画图板,要想生成visit模型,它的处理数据就是刚才所生成的pageviews模型。它的待处理目录叫做点击流的pageviews模型数据,图示如下:
2.说明
首先是 pageviews 模型,有了模型数据后,还是经过矮码的两个阶段,首先是maptask 阶段,然后是 reducetask 阶段,maptask 阶段还是要确定输入的key和V分别是什么,输入到map阶段之后,默认的key和V不需要考虑,每行的起始偏移量这一行内容,重点在于 maptask 的输出,maptask 的输出是 reducetask 的输入,reducetask 又涉及到很多的聚合分组操作,要想确定以什么作为key,需要明确根据什么进行聚合。
打开之前所画的图,在得到visit的模式的时候需要找到属于同一个会话的所有记录,然后再去找它的第一条和最后一条,所以要根据数据会话 session 聚合,不是属于同一个会话的,不能聚集到一起。现在明确的是:输出的时候把 session ID作为key,V处理数据就是刚才 pageviews 的模型数据,一行的记录都可以传递给它,需要什么就去截取什么。
输出的 key 是 session,V是 pageviewsBean,有了这样的 key 和V之后,来到reduce会涉及到大量的项目,比如来到 reduce 里会有<session1
,pageviewsBean>、<session2,pageviewsBean>
等等,按照之前的逻辑矮马编程还要进行根据key的字节信息排序,排完之后相同的可以达到同一分组,组成一个新的kv对。进行排序分组的时候是把session作为key的,相同的会话会被分到同一组中,在同一组中会组成一个新的kv对,这个新的kv对中的k是这一组共同的k,比如是 session1,而它的v变成l Iteable的迭代器,里面是pageviewsBean,这里面的可以多写几个 pageviewsBean,pageviewsBean 有几个取决于数据,即同一个会话有几部,步骤多pageviewsBean自然就多,步骤少,可能只有一个。
三、逻辑梳理
回到画图板中,同一化之后进行排序,所关注的是起始和结束情况,即只需要关注第一步和最后一步。现在又涉及到一个问题,同一个会话的所有记录在一个迭代机当中,按照逻辑把属于同一个会话的所有记录按照时间进行排序,按照时间进行排序时有一个小技巧,即按照时间排序的同时也可以按照步骤号进行排序,一个pageviews 当中所打的步骤号就是时间的顺序号,比如时间为8:30:25、8:30:35、8:31:05的顺序分别是1、2、3,所以有两个排序规则,既可以按照时间排序,也可以按照步骤号排序。排序完成之后只拿第一条和最后一条,也就是第一步和最后一步。
排序方法和之前所讲一样,把属于同一个 session 的记录保存在一个集合当中,比如一个简单的伪代码,创建一个集合叫做List L1到另一个 ArrayList 中,其中保持的对象就是 page viewsBean,把所有对象放在当中,调用 collection.sort 方法进行排序,把集合放在当中,然后重写排序规则。排序完成之后,第二步就变得更加简单了,在同一个会话所属的集合中,只提取第一条记录和最后一条记录,因为visit模型所关注的就是起始和结束情况,而第一条记录就是起始记录,最后一条记录就是离开的记录,这就构成了所谓的visit模型,它的整个流程实现起来非常简单。
但需要注意的是,此时还没有完全实现完毕,还涉及到visit模型的数据输出,这里面会涉及到多个属性,例如 inpage 进入页面、intime 进入时间,还要 outtime、outpage,以及总共访问的页面 totalpage 等,这个时候还是利用Java的传递数据追踪,创建一个对象叫做visitBean,visitBean里面涵盖了所需要保存的数据,放在当中作为对象传递出去,输出的 key 和V也就可以确定了,输出的key叫做visitBean,当然要去重写它的投资方法等,V如果不知道还是用null空来表示,这样就完成了点击流当中visit模型的梳理。
四、总结
可以发现当中还是把业务结合 reduce 矮码的编程模型来实现,整个处理的核心逻辑还是在 reducetask 阶段完成,其中涉及到了Java当中如何排序,如何进行遍历等的相关操作。
以上就是 visit 模型怎么用代码来实现,思路非常重要,决定了后续的代码能不能写出来。