基于Spark 的零售交易数据挖掘分析与可视化
本文将带你通过 PySpark 进行电商数据的分析处理,并将结果保存为 JSON 文件,供前端展示。我们将从数据的读取、处理、分析到结果保存和网页展示,覆盖完整的数据流。项目结构如下:
1、Spark 分析数据
2、生成 JSON 文件
3、使用 Bottle 框架搭建简单 Web 服务器
项目简介
我们使用了 PySpark 来处理一个电商数据集,数据存储在 HDFS 上。通过 SQL 和 RDD 操作实现了多个业务需求分析,并最终将结果保存为 JSON 文件,用于前端展示。后端 Web 服务采用 Bottle 框架,提供静态文件服务和页面展示。
数据集介绍
数据集包括了以下字段:
InvoiceNo: 订单号
StockCode: 商品编码
Description: 商品描述
Quantity: 数量
InvoiceDate: 订单日期
UnitPrice: 商品单价
CustomerID: 客户编号
Country: 国家
1. 数据读取
首先,我们从 HDFS 中读取 CSV 文件作为 Spark 的 DataFrame,并通过 createOrReplaceTempView 创建 SQL 查询视图。代码如下:
# 从HDFS中读取数据集为DataFrame
df = spark.read.format('com.databricks.spark.csv').options(header='true', inferschema='true').load('../data/E_Commerce_Data.csv')
df.createOrReplaceTempView("data")
2. 分析任务
通过 SQL 查询和 RDD 操作,项目实现了以下 10 项数据分析任务:
- 客户数最多的 10 个国家
通过 SQL 查询,统计每个国家的客户数,并选出客户数最多的 10 个国家:
def countryCustomer():
countryCustomerDF = spark.sql("SELECT Country,COUNT(DISTINCT CustomerID) AS countOfCustomer FROM data GROUP BY Country ORDER BY countOfCustomer DESC LIMIT 10")
return countryCustomerDF.collect()
- 销量最高的 10 个国家
统计每个国家的商品销量,并选出销量最高的 10 个国家:
def countryQuantity():
countryQuantityDF = spark.sql("SELECT Country,SUM(Quantity) AS sumOfQuantity FROM data GROUP BY Country ORDER BY sumOfQuantity DESC LIMIT 10")
return countryQuantityDF.collect()
- 各国总销售额分布
计算每个国家的销售额,结果按销售额大小进行排序:
def countrySumOfPrice():
countrySumOfPriceDF = spark.sql("SELECT Country,SUM(UnitPrice*Quantity) AS sumOfPrice FROM data GROUP BY Country")
return countrySumOfPriceDF.collect()
- 销量最高的 10 个商品
统计商品的销量,按销量大小选出销量最高的 10 个商品:
def stockQuantity():
stockQuantityDF = s