基于pyspark的淘宝双11数据分析与预测
舟率率 6/1/2025 pythonscalasqooptomcatjava
原地址:https://dblab.xmu.edu.cn/post/8116/
# 项目地址
# 数据类型
开放淘宝数据
# 开发环境
centos7
# 软件版本
python3.8.18、hadoop3.2.0、hive3.1.2、spark3.1.2、mysql5.7.38、scala2.12.18、jdk8、sqoop1.4.7
# 开发语言
python、Scala、Java
# 开发流程
数据预处理(shell)->数据上传(hdfs)->数据分析(hive)->数据预测(spark)->数据存储(mysql)->后端(java)->前端(html+js+css)
# 可视化图表
# 操作步骤
# 启动MySQL
# 查看mysql是否启动 启动命令: systemctl start mysqld.service
systemctl status mysqld.service
# 进入mysql终端
# MySQL的用户名:root 密码:123456
# MySQL的用户名:root 密码:123456
# MySQL的用户名:root 密码:123456
mysql -uroot -p123456
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 启动Hadoop
# 离开安全模式: hdfs dfsadmin -safemode leave
# 启动hadoop
bash /export/software/hadoop-3.2.0/sbin/start-hadoop.sh
1
2
3
4
5
2
3
4
5
# 启动hive
# 在第一个窗口中,执行后等待10-20秒
/export/software/apache-hive-3.1.2-bin/bin/hive --service metastore
# 在第二个窗口中,执行后等待10-20秒
/export/software/apache-hive-3.1.2-bin/bin/hive --service hiveserver2
# 连接进入hive终端命令如下:
# /export/software/apache-hive-3.1.2-bin/bin/beeline -u jdbc:hive2://master:10000 -n root
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 上传文件到hdfs
mkdir -p /data/jobs/dbtaobao/
cd /data/jobs/dbtaobao/
# 上传 data_format.zip
# data_format.zip 从网盘下载
unzip data_format.zip -d /data/jobs/dbtaobao/dataset/
cd /data/jobs/dbtaobao/dataset/
head -5 user_log.csv
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 数据预处理
cd /data/jobs/dbtaobao/dataset/
# 上传 "数据预处理" 目录下的 "predeal.sh" 文件
# 删除user_log.csv中的第1行记录,即字段名称
# 1d表示删除第1行,同理,3d表示删除第3行,nd表示删除第n行
sed -i '1d' user_log.csv
# 用head命令去查看文件的前5行记录,就看不到字段名称这一行了
head -5 user_log.csv
sed -i 's/\r//g' predeal.sh
# 获取数据集中双11的前100000条数据
sh predeal.sh user_log.csv small_user_log.csv
head -5 small_user_log.csv
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 上传文件到hdfs
cd /data/jobs/dbtaobao/dataset/
hdfs dfs -mkdir -p /dbtaobao/dataset/user_log/
hdfs dfs -rm -r /dbtaobao/dataset/user_log/*
hdfs dfs -put small_user_log.csv /dbtaobao/dataset/user_log/
hdfs dfs -cat /dbtaobao/dataset/user_log/small_user_log.csv | head -10
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# hive数据分析
cd /data/jobs/dbtaobao/
# 上传 "hive数据分析" 目录下的 "hive.sql" 文件
# 连接进入hive终端命令如下:
# /export/software/apache-hive-3.1.2-bin/bin/beeline -u jdbc:hive2://master:10000 -n root
# 快速执行hive.sql
hive -v -f hive.sql
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 创建MySQL表
cd /data/jobs/dbtaobao/
# 上传 "mysql" 目录下的 "mysql.sql" 文件
# 请确认mysql服务已经启动了
# 快速执行.sql文件内的sql语句
mysql -u root -p < mysql.sql
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 数据导入MySQL
cd /data/jobs/dbtaobao/
/export/software/sqoop-1.4.7.bin__hadoop-2.6.0/bin/sqoop export \
--connect jdbc:mysql://master:3306/dbtaobao?characterEncoding=utf-8 \
--username root \
--password 123456 \
--table user_log \
--export-dir /user/hive/warehouse/dbtaobao.db/inner_user_log \
--input-null-non-string '\\N' \
--input-null-string '\\N' \
-m 4 \
--fields-terminated-by ','
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 清洗训练数据
cd /data/jobs/dbtaobao/dataset/
# 上传 "预测/训练数据/" 目录下的 "predeal_test.sh" 文件
# 上传 "预测/训练数据/" 目录下的 "predeal_train.sh" 文件
sed -i 's/\r//g' predeal_test.sh
sh predeal_test.sh test.csv test_after.csv
sed -i '1d' train.csv
sed -i 's/\r//g' predeal_train.sh
sh predeal_train.sh train.csv train_after.csv
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 上传文件到hdfs
cd /data/jobs/dbtaobao/dataset/
hdfs dfs -mkdir -p /dbtaobao/dataset/
hdfs dfs -rm -r /dbtaobao/dataset/*
hdfs dfs -put train_after.csv /dbtaobao/dataset/
hdfs dfs -put test_after.csv /dbtaobao/dataset/
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 预测回头客
cd /data/jobs/dbtaobao/dataset/
# 上传 "预测" 目录下的 "predict_data.py" 文件
# 预测程序需要安装的包
pip3 install numpy==1.24.4 -i https://pypi.tuna.tsinghua.edu.cn/simple
spark-submit \
--master local[*] \
--jars /export/software/spark-3.1.2-bin-hadoop3.2/jars/mysql-connector-j-8.0.33.jar \
--driver-class-path /export/software/spark-3.1.2-bin-hadoop3.2/jars/mysql-connector-j-8.0.33.jar \
/data/jobs/dbtaobao/dataset/predict_data.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 启动可视化
# 此步骤要在windows上执行
# 需要具备jdk8环境
1
2
3
4
2
3
4