利用 Spark 预测回头客(上)

简介: 利用 Spark 预测回头客(上)

一、运行环境


至此“淘宝双 11 数据分析与预测课程案例”所需要的环境配置完成。另外实际操作中发现在案例教程中存在一些小问题,比如教程中 Eclipse 版本为 3.8,但是在配置 Tomcat Server 时又要求配置 v8.0 版本,然而 3.8 版本的 Eclipse 最多仅支持到 v7.0 版本的 Tomcat,所以实际操作时使用了更新的 Eclipse 版本。


实际配置环境结合了实际情况,没有和实验案例完全一致,不过整个功能正常实现。实际运行环境及版本如下所示。


Linux:


Ubuntu14.04


JDK:


Openjdk-1.7.0_181


Hadoop: 2.7.6


MySQL: 5.7.24


Hive: 1.2.2


Sqoop: 1.4.7


Spark: 2.1.0


Eclipse: 4.5.0


Echarts: 3.8.4


配置过程中截图如下所示,由于步骤较多,仅截取部分关键步骤。

b2dc42d51ae3125dede1352d4f366478.png

图 1.1 创建 hadoop 用户,添加管理权限


67fb6b318a599d254fe88bfc6f24235a.png

图 1.2 安装配置 SSH


fa82fced93624cd9b2f3ac86924c7587.png

图 1.3 配置 Java

92c5cae40b14fc7f058a54e73a5652ca.png

图 1.4 配置 Hadoop


a407d6062f7d85f8742852e883273c48.png


图 1.5 运行 Hadoop



190537064598636ce58089715ba5ac77.png


图 1.6 配置运行 MySQL


8e40e8983b95487fe8cc6a65eace844a.png

图 1.7 配置运行 Hive

92cbc468fe53d4624921107d3110fdc6.png


图 1.8 配置运行 Sqoop

aef429af742e2d45256183ae016dbad5.png

图 1.9 配置运行 Spark


至此“淘宝双 11 数据分析与预测课程案例”所需要的环境配置完成。另外实际操作中发现在案例教程中存在一些小问题,比如教程中 Eclipse 版本为 3.8,但是在配置 Tomcat Server 时又要求配置 v8.0 版本,然而 3.8 版本的 Eclipse 最多仅支持到 v7.0 版本的 Tomcat,所以实际操作时使用了更新的 Eclipse 版本。


二、本地数据集上传到数据仓库 Hive


实验数据集有 3 个文件,分别是用户行为日志文件 user_log.csv、回头客训练集 train.csv、回头客测试集 test.csv,以下是三个文件的数据格式及说明。

表 2.1 user_log 字段定义


image.png

image.png


回头客训练集 train.csv 和回头客测试集 test.csv,训练集和测试集拥有相同的字段。

表 2.2 user_log 字段定义


image.png

2.1 数据集的预处理

2.1.1 删除文件第一行记录(字段名称)

获取数据集并解压,可以看到 dataset 下有三个文件:test.csv、train.csv、user_log.csv。


bfa21711e5ce65814eb52cb80b700b03.png

图 2.1

查看前五条记录75d7718390b25bfe561d5f613c318c21.png


图 2.2

删除第一行的字段名称,并确认是否删除

68a906830b5b2cdfe70638953e14ef73.png


图 2.3

2.1.2 获取数据集中前 10000 条数据

建立脚本,编辑 predeal.sh 脚本文件


9374eb61b24faf1954dd821e02134495.png


图 2.4

修改执行权限,执行脚本,输出 small_user_log.csv

15c7cc9f654fcc5962123c9fb3142f37.png


图 2.5

2.1.3 把 small_user_log.csv 中的数据导入数据仓库 Hive

为此首先把这个文件上传到分布式文件系统 HDFS 中,然后在 Hive 中创建两个个外部表,完成数据导入

启动 Hadoop

1bb162d509a99bd9697d3d621364eac1.png


  • 图 2.6
  • 把 user_log.csv 上传到 HDFS 中
  • 在 HDFS 根目录下创建子目录

70aca20e9862f093fca38b337d60c454.png


图 2.7

上传文件 small_user_log.csv


a1172395a2555e87861111655b5ae127.png


图 2.8

查看 HDFS 中的 small_user_log.csv 的前 10 条记录


  • 图 2.9
  • 在 Hive 上创建数据库
  • 启动 MySQL


b1a993951973c55a66ae005a1b0df7fa.png

图 2.10

启动 Hive

11f4fee65253d977f047a77c57c697d2.png

图 2.11

这里启动时出现了一个小 bug,提示找不到 spark-assembly 集成包:


612f93bb5b494776b386ce4560e7e9ff.png

图 2.12


这是由于 hive 版本升级到 2.0 以上之后,spark-assembly 集成包被拆成分散的小 jar 包导致的,只需要编辑 bin/hive,将这个 spark-assembly-.jar` 替换成 jars/.jar 即可。


创建数据库 dbtaobao


986604736ae21caf3af1d0da99f8adbb.png

图 2.13

创建外部表

3ae6b192e3c9a54aa4261097e02d1b7d.png


图 2.14

查询数据


830537b49465b25f38349801535529ac.png

图 2.15

三、Hive 数据分析

3.1 查看 user_log 表

进入 hive shell,通过 show 指令查看表的属性和结构。如图 3.1。

52262c55d7b971345b7a9ba5b27bde46.png


图 3.1

显示结果如图 3.2。

f158a06153f6b38fd40c6ee6b65a50f9.png


图 3.2

3.2 查询条数及统计分析

3.2.1 计算表内数据行数

通过 select 指令结合 count 指令可以统计记录行数。

da656ed0047ad3477415d28e58912702.png


图 3.3

3.2.2 查询 uid 不重复的数据条数


33ca196ff16ce985993fa9a7848584e5.png

图 3.4

3.2.3 查询不重复数据条数

主要为了排除客户刷单情况。

bc5b24534ed5cb71385cc11d9d074611.png

图 3.5

可以看出,排除掉重复信息以后,只有 4754 条记录。

3.2.4 统计男女买家购买商品数量

统计双十一当天男女购买数量,方便后面计算比例。


1cf947e6e74a4c2f927fa274de7da7c2.png


图 3.6 统计男买家

297c66a9856736c516c6427dd848f2eb.png


图 3.7 统计女买家

3.2.5 查询某一天在网站购买该数量商品的用户 id

给定购买商品的数量范围,查询某一天在该网站的购买该数量商品的用户 id.


通过 group by 和 having 结合,如查询购买商品超过 5 次的用户 id 指令:

selectuser_idfromuser_logwhereaction='2'groupbyuser_idhavingcount(action='2')>5;

查询结果较长,此处不一一列出。

3.3 用户实时查询分析

3.3.1 创建新数据表

创建新的数据表 scan 进行存储,执行结果如图 3.8 所示。


c53cce0d0564c70a2286be6f58df1fd3.png

图 3.8

3.3.2 导入统计后的数据

通过 insert 指令导入数据:

hive>insertoverwritetablescanselectbrand_id,count(action)fromuser_logwhereaction='2'groupbybrand_id;

3fffb1fbfdddd383ec55dda8ab16d7ce.png


图 3.9

3.3.3 显示统计结果

执行 select 指令:

Hive>select*fromscan;

7fbb07a3c012e1156a1aa407be91c32c.png

图 3.10

相关文章
|
5天前
|
分布式计算 算法 Java
阿里云ODPS PySpark任务使用mmlspark/synapseml运行LightGBM进行Boosting算法的高效训练与推理
阿里云ODPS PySpark任务使用mmlspark/synapseml运行LightGBM进行Boosting算法的高效训练与推理
|
SQL 分布式计算 关系型数据库
利用 Spark 预测回头客(下)
利用 Spark 预测回头客(下)
350 0
利用 Spark 预测回头客(下)
|
机器学习/深度学习 分布式计算 算法
PySpark数据分析基础:pyspark.mllib.regression机器学习回归核心类详解(一)+代码详解
PySpark数据分析基础:pyspark.mllib.regression机器学习回归核心类详解(一)+代码详解
207 0
PySpark数据分析基础:pyspark.mllib.regression机器学习回归核心类详解(一)+代码详解
|
机器学习/深度学习 分布式计算 算法
PySpark数据分析基础:pyspark.mllib.regression机器学习回归核心类详解(二)+代码详解
PySpark数据分析基础:pyspark.mllib.regression机器学习回归核心类详解(二)+代码详解
177 0
PySpark数据分析基础:pyspark.mllib.regression机器学习回归核心类详解(二)+代码详解
|
机器学习/深度学习 SQL 数据采集
Spark 中 ML 和 MLlib 的特点和区别
Spark 中 ML 和 MLlib 的特点和区别
376 0
|
分布式计算 算法 数据挖掘
|
分布式计算 测试技术 Apache
|
机器学习/深度学习 分布式计算 算法
|
机器学习/深度学习 分布式计算 Apache
|
Web App开发 分布式计算 算法