1 亿条淘宝用户行为数据分析

1. 部署环境

环境采用本地Winodws+VMware虚拟化部署基于Ambari的Hadoop集群。

集群配置如下

namenode * 1
datanode * 3

i5-12450H

2 core * 1 thread

2 core * 1 thread

Memory

12GB

12GB

Disk

150GB

100GB

额外软件包

openJDK8、Mysql5.7

openJDK8

集群安装的hadoop生态组件如下

HDFS

3.1.1.3.1

YARN

3.1.1

MapReduce2

3.1.1

Tez

0.9.1

Hive

3.1.0

HBase

2.0.2

ZooKeeper

3.4.6

Ambari Metrics

0.1.0

服务器调优

关于YARN和总内存、总vcore和单个容器的内存、vocre分配需要自行选择合适的参数,尽量不浪费资源。

2. 数据集下载

提取码:m4mc

这是一份来自淘宝的用户行为数据,时间区间为 2017-11-25 到 2017-12-03,总计 100,150,807 条记录,大小为 3.5 G,包含 5 个字段。

用户ID(User ID)

一个整数

商品ID(Item ID)

一个整数

类别ID(Category ID)

一个整数

行为类型(Behavior Type)

“pv”(浏览)、“buy”(购买)、“cart”(加入购物车)、“fav”(收藏)

时间戳(Timestamp)

一个整数,通常以秒为单位。

3. 数据处理和表优化

2.1 数据导入

beeline -n hive -p进入hql命令行

创建一个临时表,并加载csv数据文件加载到其中。

创建用户行为表1。

这里使用以列优先的存储格式,定义压缩算法为snappy,对于像电商分析这样主要查询列的项目,会提高很多效率。同时对日期date进行分区,以及用户行为behavior_type进行分区是一种合理的分区方法,在后续分析过程中将大大提高查询速度。

将数据导入到ORC表中,hive会自动执行 行列转化

查看一共多少条数据。

2.2 数据清洗

DISTRIBUTE BY date, behavior_type这个是用来指定数据分发的策略,它会根据分区键的值将数据分发到不同的reduce任务中,每个reduce任务只处理一个分区的数据。这样就可以在每个分区内部去重,而不需要到全局数据去比较,所以效率高很多。在hdfs上,表按照 date, behavior_type分区后,分区的文件夹数量= date分区数* behavior_type分区数。当DISTRIBUTE BY date, behavior_type;时,可以理解为是在date分区数* behavior_type分区数 这么多个局部中比较去重。

同时如果DISTRIBUTE BY date, behavior_type粒度划分的太细,导致启动的容器太多,计算时间占比较低,可以选择只DISTRIBUTE BY一个。

3.数据分析可视化

3.1 基于时间的用户行为分析

3.1.1 总访问量PV,总用户量UV

思考以下select语句的优劣和正确性,和上面的语句谁能更好的发挥分区表的优势

3.1.2 日均访问量,日均用户量

3.1.3 一天的活跃时段分布

比较以下语句

3.1.4 一周用户的活跃分布

比较以下语句

3.2 用户行为转换率

这里使用了Brickhouse UDF,用collect UDF便捷实现了TRANSPOSE

3.3 复购率

3.4 基于 RFM 模型找出有价值的用户

RFM 模型是衡量客户价值和客户创利能力的重要工具和手段,其中由3个要素构成了数据分析最好的指标,分别是:

  • R-Recency(最近一次购买时间)

  • F-Frequency(消费频率)

  • M-Money(消费金额)

3.5 商品维度的分析

3.5.1 item_id商品

对于不同的behavior_type, 排名前50的商品,用pyhive分析后,转化表再插回。

3.5.2 商品大类category_id

Last updated