网站流量日志分析--数据预处理-- 点击流模型visit编程实现思路| 学习笔记

简介: 快速学习网站流量日志分析--数据预处理--点击流模型 visit 编程实现思路

开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第二阶段)网站流量日志分析--数据预处理--点击流模型 visit 编程实现思路】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/694/detail/12195


网站流量日志分析--数据预处理--点击流模型 visit 编程实现思路

内容介绍:

一、概述

二、思路及说明

三、逻辑梳理

四、总结


一、概述

下面来看点击流模型visit模型的具体实现,结合刚才所画的思路图来看一下如何通过代码具体实现,为了更地理解首先画图进行梳理,确定实现思路。

 

二、思路及说明

1.思路图

打开画图板,要想生成visit模型,它的处理数据就是刚才所生成的pageviews模型。它的待处理目录叫做点击流的pageviews模型数据,图示如下:

image.png

2.说明

首先是 pageviews 模型,有了模型数据后,还是经过矮码的两个阶段,首先是maptask 阶段,然后是 reducetask 阶段,maptask 阶段还是要确定输入的keyV分别是什么,输入到map阶段之后,默认的keyV不需要考虑,每行的起始偏移量这一行内容,重点在于 maptask 的输出,maptask 的输出是 reducetask 的输入,reducetask 又涉及到很多的聚合分组操作,要想确定以什么作为key,需要明确根据什么进行聚合。

打开之前所画的图,在得到visit的模式的时候需要找到属于同一个会话的所有记录,然后再去找它的第一条和最后一条,所以要根据数据会话 session 聚合,不是属于同一个会话的,不能聚集到一起。现在明确的是:输出的时候把 session ID作为keyV处理数据就是刚才 pageviews 的模型数据,一行的记录都可以传递给它,需要什么就去截取什么。

输出的 key sessionVpageviewsBean,有了这样的 key V之后,来到reduce会涉及到大量的项目,比如来到 reduce 里会有<session1pageviewsBean><session2pageviewsBean>等等,按照之前的逻辑矮马编程还要进行根据key的字节信息排序,排完之后相同的可以达到同一分组,组成一个新的kv对。进行排序分组的时候是把session作为key的,相同的会话会被分到同一组中,在同一组中会组成一个新的kv对,这个新的kv对中的k是这一组共同的k,比如是 session1,而它的v变成l Iteable的迭代器,里面是pageviewsBean,这里面的可以多写几个 pageviewsBeanpageviewsBean 有几个取决于数据,即同一个会话有几部,步骤多pageviewsBean自然就多,步骤少,可能只有一个。

 

三、逻辑梳理

回到画图板中,同一化之后进行排序,所关注的是起始和结束情况,即只需要关注第一步和最后一步。现在又涉及到一个问题,同一个会话的所有记录在一个迭代机当中,按照逻辑把属于同一个会话的所有记录按照时间进行排序,按照时间进行排序时有一个小技巧,即按照时间排序的同时也可以按照步骤号进行排序,一个pageviews 当中所打的步骤号就是时间的顺序号,比如时间为8:30:258:30:358:31:05的顺序分别是123,所以有两个排序规则,既可以按照时间排序,也可以按照步骤号排序。排序完成之后只拿第一条和最后一条,也就是第一步和最后一步。

排序方法和之前所讲一样,把属于同一个 session 的记录保存在一个集合当中,比如一个简单的伪代码,创建一个集合叫做List L1到另一个 ArrayList 中,其中保持的对象就是 page viewsBean,把所有对象放在当中,调用 collection.sort 方法进行排序,把集合放在当中,然后重写排序规则。排序完成之后,第二步就变得更加简单了,在同一个会话所属的集合中,只提取第一条记录和最后一条记录,因为visit模型所关注的就是起始和结束情况,而第一条记录就是起始记录,最后一条记录就是离开的记录,这就构成了所谓的visit模型,它的整个流程实现起来非常简单。

但需要注意的是,此时还没有完全实现完毕,还涉及到visit模型的数据输出,这里面会涉及到多个属性,例如 inpage 进入页面、intime 进入时间,还要 outtimeoutpage,以及总共访问的页面 totalpage 等,这个时候还是利用Java的传递数据追踪,创建一个对象叫做visitBeanvisitBean里面涵盖了所需要保存的数据,放在当中作为对象传递出去,输出的 key V也就可以确定了,输出的key叫做visitBean,当然要去重写它的投资方法等,V如果不知道还是用null空来表示,这样就完成了点击流当中visit模型的梳理。

 

四、总结

可以发现当中还是把业务结合 reduce 矮码的编程模型来实现,整个处理的核心逻辑还是在 reducetask 阶段完成,其中涉及到了Java当中如何排序,如何进行遍历等的相关操作。

以上就是 visit 模型怎么用代码来实现,思路非常重要,决定了后续的代码能不能写出来。

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
C++ 开发者 Python
实现Python日志点击跳转到代码位置的方法
本文介绍了如何在Python日志中实现点击跳转到代码位置的功能,以提升调试效率。通过结合`logging`模块的`findCaller()`方法记录代码位置信息,并使用支持点击跳转的日志查看工具(如VS Code、PyCharm),开发者可以从日志直接点击链接定位到出错代码,加快问题排查。
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
221 2
|
Python
Python编程实战:利用闭包与装饰器优化日志记录功能
【7月更文挑战第7天】Python的闭包和装饰器简化了日志记录。通过定义如`log_decorator`的装饰器,可以在不修改原函数代码的情况下添加日志功能。当@log_decorator用于`add(x, y)`函数时,调用时自动记录日志。进一步,`timestamp_log_decorator`展示了如何创建特定功能的装饰器,如添加时间戳。这些技术减少了代码冗余,提高了代码的可维护性。
229 1
|
存储 Java 关系型数据库
基于JSP的九宫格日志网站
基于JSP的九宫格日志网站
|
Java 程序员
技术日志:揭秘Java编程 —— 抽象类与接口的隐藏力量!
【6月更文挑战第17天】在Java编程中,抽象类和接口如同内功心法,增强代码灵活性和维护性。抽象类`Course`定义共性属性和行为,如显示大纲,子类如`ProgrammingCourse`继承并实现细节。接口`Ratable`提供评分功能,允许不同课程以多态方式实现。通过抽象类和接口,代码组织更有序,系统扩展性更强,犹如武侠高手以平凡招式创出非凡武学。不断学习和探索这些技术,能提升编程技艺,应对复杂挑战。
135 0
编程日志01:个人网站更新用户头像
编程日志01:个人网站更新用户头像
141 0
|
数据库
编程日记02:个人站优化数据库和日志
编程日记02:个人站优化数据库和日志
114 0
|
监控 安全 前端开发
Nginx 访问日志中有 Get 别的网站的请求是什么原因?
Nginx 访问日志中有 Get 别的网站的请求是什么原因?
266 0
|
7月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
824 54