电商用户行为分析项目 - 完整复盘
2026/8/20 15:10:05 网站建设 项目流程

记录了一个迷你项目的分析判断流程以及遇到的问题

文章摘要

本迷你数据分析项目因Hive/Hadoop内存不足无法执行MR任务,转而采用AWK命令成功完成分析。关键步骤包括:创建数据文件、解决Hive建表关键字冲突问题、通过AWK实现三类分析(品类转化率/用户行为统计/时段分布)。核心收获包括掌握AWK工具使用、理解Hive局限性(如内存敏感和关键字限制),以及灵活切换技术方案的能力(Hive→AWK)。项目验证了轻量级工具在小数据场景的高效性,建议后续在资源充足时可尝试Hive/Spark处理更大数据集。当前AWK方案已完整输出所有分析指标。

项目摘要

用Linux Shell和AWK处理了一份电商行为模拟数据(约500条记录),做了简单的统计汇总。主要目的是练手数据处理流程,项目本身不大,重在跑通全流程。

1 项目背景

目标:完成一个迷你数据分析项目,掌握Hive+Hadoop的基本操作

实际情况

  • 成功完成数据分析

  • Hive/Hadoop因内存问题无法正常执行MR任务

  • 采用AWK命令替代,成功得出分析结果

技术栈:Hive ,Hadoop , AWK , Linux Shell

2 完整操作步骤回顾

第1步:创建数据文件

cd /usr/local/hadoop/project_data

pwd记住路径,后面要用到

遇到的问题:找不到文件,先查看文件在哪里,再进入文件目录,用下面的命令查看

# 在当前目录查看所有文件 ls -la /usr/local/hadoop/

第2步:Hive建表

遇到障碍

-- 第一次建表失败 create table behavior ( user_id int, item_id int, category string, action string, time string -- time是保留关键字 ); -- 报错:ParseException line 6:2 cannot recognize input near 'time'

修改代码,先删掉表再创建表

drop table behavior;

问题解决完后,继续建表,并加载数据

create table behavior ( user_id int, item_id int, category string, action string, action_time string -- 避开关键字 );

加载数据

#路径为pwd显示的,如 /usr/local/hadoop/hive_data load data local inpath '/usr/local/hadoop/hive_data' overwrite into table behavior;

经验总结

  • timedatetimestamp是Hive保留关键字,不能用作字段名

  • 建表时加前缀是好习惯:user_idaction_timecreate_date

第3步:Hive查询失败

执行下面的命令之后,出现报错,内存问题

select count(*) from behavior; -- 报错:FAILED: Execution Error, return code 2

因为机器内存不够,所以MapReduce任务无法启动,执行不了hive查询。本地模式设置了减小内存,但仍然失败,Memory是6GB

#关MR,走本地 set hive.exec.mode.local.auto=true; set hive.exec.mode.local.auto.inputbytes.max=50000000; --50MB /* 50,000,000 bytes ÷ 1024 = 48,828 KB 48,828 KB ÷ 1024 = 47.68 MB ≈ 50 MB */

应对:不用Hive,改用Linux命令直接分析CSV文件

第4步:AWK命令分析

分析1:各品类转化率
awk -F',' ' NR>1 { if($3=="电子" && $4=="浏览") views_e++ if($3=="电子" && $4=="购买") buys_e++ if($3=="服装" && $4=="浏览") views_c++ if($3=="服装" && $4=="购买") buys_c++ if($3=="食品" && $4=="浏览") views_f++ if($3=="食品" && $4=="购买") buys_f++ } END { print "品类\t浏览数\t购买数\t转化率%" print "电子\t" views_e "\t" buys_e "\t" buys_e*100/views_e print "服装\t" views_c "\t" buys_c "\t" buys_c*100/views_c print "食品\t" views_f "\t" buys_f "\t" buys_f*100/views_f }' behavior.csv

执行后输出

含义

  • 服装类转化率100%(虽然样本小),说明用户浏览后都买了

  • 电子类转化率66.67%,表现不错

  • 食品类转化率0%,用户只看不买,可能价格或品类有问题

分析2:用户行为汇总
awk -F',' 'NR>1 {print $1","$4}' behavior.csv | sort | awk -F',' ' { user[$1]++; action_list[$1]=action_list[$1]","$2 } END { print "用户ID\t行为总数\t行为类型数\t做过哪些" for(u in user) { split(action_list[u], arr, ",") delete seen count=0 for(i in arr) { if(arr[i]!="" && !seen[arr[i]]++) { count++ } } print u"\t"user[u]"\t"count"\t"action_list[u] } }' | sort -k2 -nr

输出

含义

  • 用户1001是最活跃用户(5次行为,涵盖所有类型)

  • 用户1004也很活跃,行为路径完整(浏览→收藏→加购→购买)

  • 用户1005只是看看,没有深度互动

关键学习

  • AWK中数组的用法:array[key]=value

  • split()函数分割字符串

  • delete删除数组用于去重

  • sort -k2 -nr按第2列数字降序排序

分析3:每小时行为分布
awk -F',' 'NR>1 { hour=substr($5,12,2) print hour","$4 }' behavior.csv | sort | uniq -c | awk ' { print $2"\t"$3"\t"$1 }' | sort

输出

上午10点是用户最活跃的时候,逛的人多、买的人也多。到了11点,人流量直接腰斩,啥数据都跟着少了一半

命令链解析

  1. awk- 提取小时和动作

  2. sort- 排序

  3. uniq -c- 去重并计数

  4. awk- 格式化输出

  5. sort- 最终排序

第5步结果分析

数据长什么样

单表behavior,约500条行为记录,包含用户ID、商品ID、行为类型、时间四个字段。

跑了什么分析

  • 各品类转化率

  • 用户行为汇总

  • 每小时行为分布

看到什么结果

  • 服装类转化率100%,电子类66.67%,食品类0%(食品类用户只看不买,需要调整品类或价格)

  • 用户1001最活跃(5次行为覆盖全路径),用户1005仅浏览无互动

  • 上午9-10点是访问高峰,适合推送营销内容

有什么用

  • 验证了AWK+Linux Shell可以快速处理CSV格式的行为数据

  • 简单的SQL查询和分组统计没问题

  • 后续可以加图表展示或者定时自动跑

3 技术栈对比

方案优点缺点本次使用
HiveSQL语法友好,适合大数据需要Hadoop集群,内存要求高失败
AWK轻量级,无需额外服务语法不熟悉,适合小数据成功
Python功能强大,易于理解需要安装Python环境

备选

4 核心经验总结

做对的

  1. 遇到障碍及时切换方案:Hive跑不动立即改用AWK

  2. 逐步验证:每步都确认结果再继续

  3. 保留关键字避坑time不能用,改成action_time

  4. lspwd确认文件位置

  5. 最终用AWK成功完成全部3个分析

踩过的坑

  1. Hive建表字段名不能用关键字(time)

  2. AWK变量名拼接错误(字符串和变量连接格式)

  3. AWK数组语法不熟悉(第一次用二维数组报错)

  4. 文件路径不对(一开始找不到CSV文件)

关键命令速记

# 1 创建文件 cat > 文件名 << 'EOF' 内容 EOF
# 2 AWK常用模式 awk -F',' '{处理逻辑}' 文件名
# 3 管道组合 命令1 | 命令2 | 命令3

5 复盘感悟

"不是技术多牛,而是遇到问题时能快速找到替代方案"

本次项目的核心价值:

  1. 完成了数据分析目标(虽然绕过了Hive)

  2. 掌握了AWK这个轻量级数据分析工具

  3. 理解了Hive/Hadoop的局限性(内存敏感)

  4. 学会了根据实际情况灵活调整技术方案

6 后续优化方向

如果以后数据量增大,可以学习用Hive或Spark处理更大规模数据,目前AWK方案对小数据量已经够用。

但在当前环境下,AWK方案就是最优解!

项目状态:已完成,所有分析指标均得出有效结论!

完结

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询