### **Spark SQL 零售商店数据分析项目**
**项目名称**:零售商店销售数据分析
**技术栈**:Spark 3.x + Python/Scala
**考核目标**:掌握 DataFrame 创建、查询、聚合、多表关联等核心操作
------
## **一、数据集说明**
### **1. 员工表 `employee.csv`**
```csv
emp_id,name,age,gender,department,salary,hire_date
E001,张伟,35,M,销售部,8500,2020-05-12
E002,李娜,28,F,财务部,9200,2021-02-18
E003,王强,42,M,物流部,7800,2019-08-03
E004,赵敏,31,F,销售部,8800,2021-07-22
E005,刘洋,26,M,IT部,10500,2022-01-15
E006,陈雪,29,F,销售部,8600,2020-11-30
E007,杨光,33,M,财务部,9500,2018-09-10
E008,周婷,27,F,物流部,8000,2022-03-25
```
### **2. 销售表 `sales.csv`**
```csv
sale_id,emp_id,product_id,quantity,unit_price,sale_date
S001,E001,P1001,2,299.50,2023-05-10
S002,E004,P1002,1,1599.00,2023-06-15
S003,E001,P1003,3,89.90,2023-04-18
S004,E006,P1001,1,299.50,2023-07-02
S005,E003,P1004,2,450.00,2023-05-28
S006,E004,P1002,1,1599.00,2023-06-20
S007,E002,P1005,4,120.00,2023-03-12
S008,E005,P1003,2,89.90,2023-08-05
```
### **3. 商品表 `product.csv`**
```csv
product_id,product_name,category,supplier
P1001,无线耳机,电子产品,SupplierA
P1002,智能手机,电子产品,SupplierB
P1003,保温杯,日用品,SupplierC
P1004,运动鞋,服装,SupplierD
P1005,笔记本,文具,SupplierA
```
------
## **二、考核任务**
### **任务1:DataFrame 创建与基础操作(30分)**
1. 加载所有CSV文件为DataFrame,并打印Schema(10分)
2. 统计各部门员工数量(10分)
3. 查询薪资超过9000的员工(10分)
**示例代码**:
```python
employee_df = spark.read.csv("employee.csv", header=True, inferSchema=True)
employee_df.filter("salary > 9000").show()
```
### **任务2:数据清洗与转换(20分)**
1. 处理销售表中的空值(`quantity`缺失时填充1)(10分)
2. 计算每笔销售的总金额(`quantity * unit_price`)(10分)
**示例代码**:
```python
from pyspark.sql.functions import col
sales_df = sales_df.na.fill({"quantity": 1})
sales_df.withColumn("total_amount", col("quantity") * col("unit_price")).show()
```
### **任务3:多表关联与聚合(40分)**
1. 查询每笔销售的详细信息(含员工名和商品名)(15分)
2. 统计各商品类别的销售总额(15分)
3. 找出销售额最高的员工(显示姓名和总销售额)(10分)
**示例代码**:
```python
joined_df = sales_df.join(employee_df, "emp_id").join(product_df, "product_id")
joined_df.select("name", "product_name", "total_amount").show()
```
------
## **三、提交要求**
1. **代码文件**:完整的PySpark/Scala脚本
2. **运行截图**:关键查询结果的终端输出
3.
分析报告
(可选):
- 数据质量问题和处理方式
- 关键业务发现(如最佳销售部门、热门商品)
------
## **四、评分标准**
| **任务** | **评分点** | **分值** |
| :------------: | :----------------------: | :------: |
| DataFrame创建 | 正确加载数据并打印Schema | 30 |
| 数据清洗 | 空值处理、计算列添加 | 20 |
| 多表关联与聚合 | JOIN操作、聚合函数使用 | 40 |
| 数据可视化 | 图表正确性 | 10 |
**建议时间**:120分钟
**难度**:⭐️⭐️⭐️(中等)
------
## **五、扩展挑战(可选)**
1. 计算员工销售额的月度增长率
2. 使用窗口函数找出各部门薪资最高的员工
**示例代码**:
python
复制
```python
from pyspark.sql.window import Window
windowSpec = Window.partitionBy("department").orderBy(col("salary").desc())
employee_df.withColumn("rank", rank().over(windowSpec)).show()
```
------
### **项目特点**
1. **业务贴近性**:零售行业真实场景(员工、销售、商品)
2. **技能全覆盖**:从数据加载到复杂聚合+可视化
3. **可扩展性**:可通过增加数据量或添加时间分析提升难度