在HBase命令行工具中执行“list”命令,查看HBase数据库中的所有数据表。学习目标/Target
掌握热门品类Top10分析实现思路
掌握如何创建Spark连接并读取数据集
掌握利用Spark获取业务数据
掌握利用Spark统计品类的行为类型
掌握利用Spark过滤品类的行为类型
掌握利用Spark合并相同品类的行为类型
掌握利用Spark根据品类的行为类型进行排序
掌握将数据持久化到HBase数据库
熟悉通过Spark On YARN运行程序
概述
品类指商品所属分类,用户在访问电商网站时,通常会产生很多行为,例如查看商品的信息、将感兴趣的商品加入购物车和购买商品等,这些行为都将作为数据被网站存储。本章我们将通过对电商网站存储的用户行为数据进行分析,从而统计出排名前10的热门品类。
1. 数据集分析
某电商网站2019年11月产生的用户行为数据存储在文件user_session.txt,该文件中的每一行数据都表示一个用户行为。
{"user_session":"0000007c-adbf-4ed7-af17-d1fef9763d67","event_type":"view","category_id":"2053013553090134275", "user_id":"560165420","product_id":"8900305","address_name":"Maryland","event_time":"2019-11-18 09:16:19"}
user_session:用于标识用户行为的唯一值。
event_type:表示用户行为的类型,包括view(查看)、cart(加入购物车)和purchase(购买)行为。
category_id:表示商品品类ID。
user_id:表示用户ID。
product_id:表示商品ID。
address_name:表示产生事件的区域。
event_time:表示产生事件的具体时间。
2. 实现思路分析
分别统计各个品类商品的查看次数、 加入购物车次数以及购买次数。
将同一品类中商品的查看、加入购物车 以及购买次数进行合并。
自定义排序规则按照各个品类中商品的查看、 加入购物车和购买次数进行降序排序,获取 排名前10的品类,就是热门品类Top10。排 序时,优先按照各个品类商品的查看次数降 序排列,如果查看次数相同,则按照各个品 类商品的加入购物车次数进行降序排列。如 果查看次数和加入购车次数都相同,那么按 照各品类商品的购买次数进行降序排列。
将同一品类中商品的查看、加入购物车和 购买次数映射到自定义排序规则中进行排 序处理。
读取数据集中的行为类型(event_type)和品类ID(category_id)数据,为了便于后续聚合处理时,将相同Key的Value值进行累加,计算每个品类中不同行为出现的总次数,这里需要对输出结果的数据格式进行转换处理,将行为类型和品类ID作为Key,值1作为Value。
统计各个品类的查看、加入购物车和购买次数。
将聚合结果进行过滤处理,并分为三部分数据,分别是各个品类查看次数、各个品类加入购物车次数和各个品类购买次数。对过滤后的三部分数据进行转换处理,去除数据中的行为类型字段。此步目的是为了后续合并操作时,明确同一品类中不同行为类型所处位置。
将Key值相同的Value进行合并处理,目的是为了将相同品类的查看次数、加入购物车次数和购买次数合并到一行。
对每个品类中查看次数(viewcount)、加入购物车次数(cartcount)和购买次数(purchasecount)进行排序处理,在排序过程会涉及三类值的排序,因此这里需要使用Spark的二次排序,在排序操作时使用自定义排序的方式进行处理。
3. 实现热门品类Top10
3.1 创建项目
本项目在Windows环境下通过IntelliJ IDEA工具构建Maven项目实现,需要提前在Windows环境下安装JDK1.8环境。
创建Maven项目
打开IntelliJ IDEA开发工具进入IntelliJ IDEA欢迎界面。
在IntelliJ IDEA欢迎界面单击下拉框“Configure”,依次选择“Project Defaults”→“Project Structure”选项,配置项目使用的JDK。
配置Maven项目的组织名(GroupId)和项目工程名(ArtifactId)。
配置项目名称(Project name)和项目本地的存放目录(Project location)。
Maven项目创建完成后的目录结构。
导入依赖
在项目pom.xml文件中添加如下配置内容: 对项目中Netty依赖进行多版本管理,避免本地运行出现多个版本的Netty导致程序出现NoSuchMethodError异常。 引入JSON依赖,用于解析JSON数据。 引入HBase依赖,用于操作HBase数据库。 引入Spark依赖,用于开发Spark数据分析程序。 指定Maven编译的JDK版本。 配置程序打包方式并指定程序主类。