本页目录
  1. 目标与起点
  2. 1 RDD观察
  3. 2 明确清洗口径
  4. 3 SQL对照
  5. 4 从HDFS读取并提交YARN
  6. 5 新订单与路径修复
  7. 报告提交前核对

实验3:PySpark数据分析(4学时)

在Windows打开学生包starter/reports/lab03-report.docx,另存为学号+班级+姓名+实验3报告.docx。每步按下方列出的Word栏目填写结果、粘贴文本和插入图片,最终提交这一份Word报告。

目标与起点

从L03镜像开始,Spark、Hadoop和对应Python环境已就绪。用独立销售样例完成RDD、DataFrame和SQL练习;练习过滤、分组和求和。

建议180分钟:RDD25;清洗45;汇总与SQL40;YARN25;参数与故障25;整理报告20。

labctl stop
labctl start lab03
cd ~/work/lab03
mkdir -p evidence
spark-submit rdd_demo.py

准备阶段先运行labctl doctor并记录镜像编号;截图、结果与源码按记录与提交方法整理。

1 RDD观察

预期平方为 [1,4,9,16],分区数为2。补充“过滤偶数并求和”,先预测结果6。把输入分区改为1和2,比较结果;记录分区数与计算结果;本次比较关注分区语义。

本步填写 Word 报告:1 RDD观察

粘贴和填写

  • 两次运行输出:粘贴分区1与分区2的命令、分区数、平方列表及偶数和。
  • 预测与解释:填写修改前预测,说明分区数变化与本次结果的关系。

预期结果核对

核对项目 预期结果
分区数 分别运行1和2
平方列表 两次均为[1,4,9,16]
偶数之和 两次均为6

2 明确清洗口径

输入 /opt/course/data/sales.csv 共8条订单:

  • 只保留 quantity > 0 且 unit_price 非空、非负的行,留下5条。
  • 每行营业额为 quantity * unit_price,按category汇总。
  • 此样例价格均为整数,使用样例单位;实训金额统一用整数“分”,避免浮点货币误差。

手算:books为40、food为31、tools为30,总营业额101。完成 analyze.py 的三个TODO,输出本地 report.json,形状为 {"books":40,"food":31,"tools":30}。JSON键顺序不影响检查。

spark-submit analyze.py
cat report.json
labctl check lab03

本步填写 Word 报告:2 明确清洗口径

粘贴和填写

  • 数据与手算:粘贴sales.csv原文;按订单写被过滤原因及三类营业额的手算过程。
  • 程序结果:粘贴清洗前后行数输出、运行命令及本地report.json全文。
  • 实现说明:说明过滤条件、营业额列与聚合方法,源码放到源码区。

预期结果核对

核对项目 预期结果
输入与清洗行数 8条→5条
过滤订单 6 数量0;7 数量负;8 单价NULL
类别营业额 books=40 food=31 tools=30
总营业额 101

3 SQL对照

将清洗后的DataFrame注册为临时视图,使用SQL完成同一统计。把SQL和运行结果放进报告;两种写法使用相同清洗口径,结果应一致。本次将NULL单价作为无效记录过滤。

本步填写 Word 报告:3 SQL对照

粘贴和填写

  • SQL与视图:粘贴注册临时视图的代码和执行SQL的完整查询。
  • 对照结果:粘贴DataFrame与SQL两份实际输出,逐类写是否一致。

预期结果核对

核对项目 预期结果
视图口径 使用清洗后的DataFrame
SQL与DataFrame结果 均为books40 food31 tools30

4 从HDFS读取并提交YARN

hdfs dfs -mkdir -p /course/lab03
hdfs dfs -put -f /opt/course/data/sales.csv /course/lab03/sales.csv
spark-submit --master yarn --deploy-mode client analyze.py \
  --input hdfs://localhost:9000/course/lab03/sales.csv
labctl check lab03

本实验使用client模式,driver在当前虚拟机进程中,便于把小型report.json保存到当前目录。运行结束后YARN页面记录application ID;网页记录与结果检查需同时提供。

本步填写 Word 报告:4 从HDFS读取并提交YARN

粘贴和填写

  • 上传与运行:粘贴上传CSV、spark-submit --master yarn --deploy-mode client的完整命令及application ID。
  • 结果与路径:粘贴本地和YARN两份JSON,填写Driver结果的绝对路径与状态日志。

预期结果核对

核对项目 预期结果
输入URI hdfs://localhost:9000/course/lab03/sales.csv
最终状态 FINISHED和SUCCEEDED
输出 Driver本地report.json 与本地结果相同

插图位置

  • 图1 Spark的YARN应用(模板标识 04-yarn.png):包含地址栏、同一个application ID、FINISHED与SUCCEEDED,能够读清关键状态。

5 新订单与路径修复

另存一份CSV,加入一条 9,books,2,15 的有效订单(四列依次为订单编号、类别、数量、单价),预测books变为70再验证。保留原始数据,用 --input 指向新文件。

故障练习:将输入路径写错一次;从错误消息中提取缺失路径,再用 ls 或 hdfs dfs -ls 检查对应文件系统。按实际文件位置修正输入参数。

新输入保持CSV表头与四列结构,追加完整订单9,books,2,15。保存为evidence/05-sales-personal.csv,执行:

spark-submit analyze.py --input evidence/05-sales-personal.csv \
  --output evidence/05-personal-report.json 2>&1 | tee evidence/05-personal.log

本步填写 Word 报告:5 新订单与路径修复

粘贴和填写

  • 个人输入与结果:粘贴新增行、--input与--output命令、个人JSON全文及预测值。
  • 路径错误与修复:粘贴错误路径命令、错误原文、ls或HDFS列表、修正命令与运行结果。
  • 最终检查:粘贴labctl check lab03输出。

预期结果核对

核对项目 预期结果
新增CSV行 9,books,2,15
个人结果 books=70 food=31 tools=30 总额131
规定report.json 保留原始结果 总额101

报告提交前核对

对应 Word 的“源码与运行说明”区

  • rdd_demo.py全文。
  • analyze.py全文。
  • query.sql全文。

按模板粘贴实际运行内容,保留缩进并填写文件在虚拟机中的绝对路径。

逐项检查

  • [ ] 报告“1 RDD观察”的实际结果及填写栏目完整。
  • [ ] 报告“2 明确清洗口径”的实际结果及填写栏目完整。
  • [ ] 报告“3 SQL对照”的实际结果及填写栏目完整。
  • [ ] 报告“4 从HDFS读取并提交YARN”的实际结果及填写栏目完整。
  • [ ] 报告“5 新订单与路径修复”的实际结果及填写栏目完整。
  • [ ] 图1 Spark的YARN应用已插入,符合模板中的截图要求。
  • [ ] 姓名、学号、班级等身份信息完整;实训填写全体成员及个人记录。
  • [ ] AI使用情况报告填写简短说明或粘贴一张相关截图;未使用填“未使用”。
  • [ ] 保存后重新用Microsoft Word打开,检查截图和文本可读。

按Word记录与提交方法提交填写完成的一份Word报告。教师依据报告中的实际结果、源码、截图和个人记录评分。