电商用户行为分析项目 - 完整复盘
记录了一个迷你项目的分析判断流程以及遇到的问题
文章摘要
本迷你数据分析项目因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;
经验总结:
-
time、date、timestamp是Hive保留关键字,不能用作字段名 -
建表时加前缀是好习惯:
user_id、action_time、create_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点,人流量直接腰斩,啥数据都跟着少了一半
命令链解析:
-
awk- 提取小时和动作 -
sort- 排序 -
uniq -c- 去重并计数 -
awk- 格式化输出 -
sort- 最终排序
第5步结果分析
数据长什么样
单表 behavior,约500条行为记录,包含用户ID、商品ID、行为类型、时间四个字段。
跑了什么分析
-
各品类转化率
-
用户行为汇总
-
每小时行为分布
看到什么结果
-
服装类转化率100%,电子类66.67%,食品类0%(食品类用户只看不买,需要调整品类或价格)
-
用户1001最活跃(5次行为覆盖全路径),用户1005仅浏览无互动
-
上午9-10点是访问高峰,适合推送营销内容
有什么用
-
验证了AWK+Linux Shell可以快速处理CSV格式的行为数据
-
简单的SQL查询和分组统计没问题
-
后续可以加图表展示或者定时自动跑
3 技术栈对比
| 方案 | 优点 | 缺点 | 本次使用 |
|---|---|---|---|
| Hive | SQL语法友好,适合大数据 | 需要Hadoop集群,内存要求高 | 失败 |
| AWK | 轻量级,无需额外服务 | 语法不熟悉,适合小数据 | 成功 |
| Python | 功能强大,易于理解 | 需要安装Python环境 |
备选 |
4 核心经验总结
做对的
-
遇到障碍及时切换方案:Hive跑不动立即改用AWK
-
逐步验证:每步都确认结果再继续
-
保留关键字避坑:
time不能用,改成action_time -
用
ls和pwd确认文件位置 -
最终用AWK成功完成全部3个分析
踩过的坑
-
Hive建表字段名不能用关键字 (
time) -
AWK变量名拼接错误 (字符串和变量连接格式)
-
AWK数组语法不熟悉 (第一次用二维数组报错)
-
文件路径不对 (一开始找不到CSV文件)
关键命令速记
# 1 创建文件
cat > 文件名 << 'EOF'
内容
EOF
# 2 AWK常用模式
awk -F',' '{处理逻辑}' 文件名
# 3 管道组合
命令1 | 命令2 | 命令3
5 复盘感悟
"不是技术多牛,而是遇到问题时能快速找到替代方案"
本次项目的核心价值:
-
完成了数据分析目标(虽然绕过了Hive)
-
掌握了AWK这个轻量级数据分析工具
-
理解了Hive/Hadoop的局限性(内存敏感)
-
学会了根据实际情况灵活调整技术方案
6 后续优化方向
如果以后数据量增大,可以学习用Hive或Spark处理更大规模数据,目前AWK方案对小数据量已经够用。
但在当前环境下,AWK方案就是最优解!
项目状态:已完成,所有分析指标均得出有效结论!
完结
更多推荐




所有评论(0)