
Data Engineering ZoomcampmacOS 上安装 Spark 4.x 与 PySpark 的完整实战指南【免费下载链接】data-engineering-zoomcampData Engineering Zoomcamp is a free 9-week course on building production-ready data pipelines. Join the course here 项目地址: https://gitcode.com/GitHub_Trending/da/data-engineering-zoomcamp本指南基于 Data Engineering Zoomcamp 第 6 周 Batch 模块的 macOS 官方安装文档cohorts/2027/06-batch/setup/macos.md编写。它面向在 macOS 上为批处理课程搭建本地 Spark 开发环境的开发者完整覆盖 Java 17 安装、JAVA_HOME环境配置、PySpark 安装uv 与 pip 两种方式、历史SPARK_HOME清理以及环境验证的完整流程。读完本文你将拥有一个可直接运行 PySpark 脚本、衔接后续出租车数据批处理作业的本地 Spark 4.x 环境。环境前提macOS 与 Homebrew本文的安装流程针对 macOS 设计官方文档在 macOS 15Sequoia上完成测试其他 macOS 版本同样适用。整个安装路线遵循一个明确原则通过包管理器与 Python 包管理器安装所有组件不再手工下载 Spark 发行包这与模块中另一份针对 Linux/云虚拟机的传统手工安装指南03-installing-spark.md形成对照——后者演示的是 Spark 3.0.3 的手动解压方式而本指南采用的是 Spark 4.x 的简化安装路线。在开始之前请确认机器上已安装 HomebrewmacOS 社区最常用的包管理器。后续所有安装命令都将通过brew执行。第一步安装 JavaOpenJDK 17Spark 运行在 JVMJava 虚拟机之上因此安装 Spark 的第一步永远是安装 Java。Spark 4.x 要求 Java 17这一点与 Linux 指南允许 17 或 21略有不同macOS 上请严格使用 17。使用 Homebrew 安装 OpenJDK 17brew install openjdk17安装完成后需要把 Java 加入 shell 环境。在 macOS 上Homebrew 安装的 OpenJDK 默认是 keg-only不自动链接到系统路径因此必须手动配置环境变量。编辑你的~/.zshrcmacOS 默认 shell 为 zsh如果你使用 bash则编辑.bash_profile追加以下两行export JAVA_HOME$(brew --prefix openjdk17) export PATH$JAVA_HOME/bin:$PATHJAVA_HOME是 Spark 启动脚本会查找的关键变量命名必须精确无误Spark 的脚本依赖它定位 JDK$(brew --prefix openjdk17)会动态解析出 Homebrew 安装 OpenJDK 17 的实际路径比硬编码路径更稳健也便于日后升级PATH中将$JAVA_HOME/bin前置确保java、javac等命令优先解析到刚安装的 JDK 17。保存文件后让配置立即生效source ~/.zshrc然后验证 Java 是否工作正常java --version官方文档给出的参考输出具体版本号随安装时间略有差异openjdk 17.0.14 2026-01-21 OpenJDK Runtime Environment Homebrew (build 17.0.140) OpenJDK 64-Bit Server VM Homebrew (build 17.0.140, mixed mode, sharing)只要输出中的版本号是17.x即说明 Java 环境配置成功。如果java --version仍显示旧版本请检查~/.zshrc中是否在JAVA_HOME导出之后还有其他覆盖PATH或JAVA_HOME的语句。第二步安装 PySpark推荐使用 uvJava 就绪后接下来安装 Python 侧的 PySpark。课程官方推荐使用 uv 作为 Python 包与虚拟环境管理器它比传统 pip 工作流更快速、更简洁。在项目目录中初始化并添加依赖uv init uv add pysparkuv init会在当前目录创建一个 Python 项目骨架含pyproject.tomluv add pyspark将 PySpark 写入依赖清单并安装到项目的虚拟环境.venv中同时锁定精确版本保证环境可复现。之后使用uv run运行你的 Python 脚本uv 会自动激活项目虚拟环境uv run python your_script.py如果你更习惯传统工具链也可以直接用 pippip install pyspark关于兼容 pip 的原生环境无 uv此时请确保 pip 属于你要使用的 Python 解释器例如python3 -m pip install pyspark避免装进错误的解释器。关键差异PySpark 自带 Spark 发行版无需单独下载无论使用 uv 还是 pip两种方式安装的 PySpark都捆绑了一份完整的 Spark 发行版——这意味着你不再需要像 Spark 3.x 时代那样去 Apache 官网下载spark-*.tgz压缩包、解压并手工设置SPARK_HOME。这正是 03-installing-spark.md 中提到的简化路线安装pysparkpip 包即随之带来 Spark。模块视频里演示的则是 Spark 3.0.3 手工安装需要额外导出SPARK_HOME、PYTHONPATH并指向python/lib/py4j-*.zip而本指南面向的 Spark 4.x 彻底绕开了这些步骤。重要清理旧的 SPARK_HOME 环境变量如果你之前在机器上安装过 Spark 3.x并已在~/.zshrc或.bash_profile中设置了SPARK_HOME例如指向某个本地 Spark 目录请务必删除那一行。原因是PySpark 4.x 捆绑了自己的 Spark不再需要SPARK_HOME若旧变量仍然存在PySpark 4.x 会去加载旧版本的 JAR 包并导致运行失败。这是一个非常典型的升级陷阱——新代码装好了却被陈旧的全局环境变量干扰。检查你的 shell 配置文件确保不存在任何export SPARK_HOME...之类的残留。第三步编写测试脚本验证环境环境配置完成后创建一个测试脚本test_spark.py来验证整条链路Java Spark Python是否打通import pyspark from pyspark.sql import SparkSession spark SparkSession.builder \ .master(local[*]) \ .appName(test) \ .getOrCreate() print(fSpark version: {spark.version}) df spark.range(10) df.show() spark.stop()这段脚本逐行解读如下SparkSession.builder是 PySpark 应用的统一入口负责构建与 Spark 的会话.master(local[*])指定运行模式为本地集群local表示在本机运行*表示使用本机全部 CPU 核心也可以写成local[2]限定为 2 个核心。从源码结构看这与模块 Notebookcode/03_test.ipynb中启动本地SparkSession的方式完全一致.appName(test)为本次 Spark 应用命名该名称会显示在 Spark UI 的 Application 页面中.getOrCreate()返回已存在的会话若不存在则创建新会话方便在 Notebook 等长驻环境中重复使用spark.range(10)生成 09 的分布式数据集DataFramedf.show()以表格形式打印结果spark.stop()在脚本结束时释放资源。运行脚本uv run python test_spark.py如果使用 pip 安装则直接运行python test_spark.py启动过程中可能会看到如下警告WARNING: Using incubator modules: jdk.incubator.vector这条警告源于 JDK 17 中孵化中的向量计算模块可以放心忽略不影响 Spark 正常工作。运行成功后终端会先打印 Spark 版本号4.x随后输出一张 09 的表格——这表明 Java、Spark、PySpark 三层环境已全部就绪。环境验证通过后如何继续课程本地 Spark 环境搭建完成只是起点接下来建议按模块顺序展开练习对照模块笔记深入理解先阅读 02-introduction-to-spark.md 与 03-installing-spark.md理解 Spark 的本地集群概念与安装背景运行官方 Notebook模块提供了 code/03_test.ipynb 作为入门样例读取出租车区域 CSV 并写出 parquet可直接在本地环境中复现进阶样例还包括 SQL、GroupBy、Join、RDD 等练习code/06_spark_sql.py 等使用 Spark UI 观察作业本地模式下Spark 启动时会自动开启 Web UI默认端口 4040地址http://localhost:4040你可以实时观察每个 Job/Stage/Task 的执行情况这是理解批处理作业内部行为最直观的工具按需参考其他平台的安装指南如果你还需要在 Linux含 WSL或 Windows 上搭建同样环境可分别参考 setup/linux.md 与 setup/windows.md两者与 macOS 指南共享相同的 PySpark 安装与测试流程差异仅在于 Java 的获取方式Linux 用apt安装 OpenJDK 17/21Windows 用 Adoptium/Temurin JDK 17进阶Spark on YARN若后续需要运行 Spark 与 Docker 结合的材料模块中称为 Spark-and-Docker则需要安装 Hadoop 并以伪分布式模式运行 YARN详见 setup/hadoop-yarn.md。该指南还包含连接 Google Cloud Storage 的配置对应 setup/config/spark-defaults.conf 与 setup/config/core-site.xml涉及 GCS 连接器 JAR 与fs.gs.*属性的设置——这部分属于可选进阶内容与本次 macOS 本地环境无关。常见问题速查Q1java --version显示的不是 17检查~/.zshrc中JAVA_HOME与PATH两行导出是否生效echo $JAVA_HOME查看并确认没有其他工具如 jenv、SDKMAN抢先覆盖了 Java 版本。Q2设置了旧的SPARK_HOME会怎样PySpark 4.x 会优先加载SPARK_HOME指向目录中的旧 JAR导致启动失败或行为异常。删除 shell 配置中的SPARK_HOME导出后重新打开终端即可。Q3uv run与pip两种方式能否混用可以但注意 uv 创建的是独立的项目虚拟环境.venvpip 安装则进入当前激活的解释器环境两者是隔离的。建议全程使用其中一种方式保持一致。Q4jdk.incubator.vector警告需要处理吗不需要。该警告来自 JDK 17 的孵化模块Spark 官方说明可安全忽略。Q5安装完成后需要手动下载 Spark 吗不需要。PySpark 包捆绑了完整的 Spark 发行版安装pyspark即完成 Spark 本体安装这也是 Spark 4.x 与旧版最大的体验差异。至此你的 macOS 机器已经具备一套干净的 Spark 4.x PySpark 本地开发环境可以无缝进入 Data Engineering Zoomcamp 批处理模块的实战环节处理高吞吐量的纽约出租车数据作业了。【免费下载链接】data-engineering-zoomcampData Engineering Zoomcamp is a free 9-week course on building production-ready data pipelines. Join the course here 项目地址: https://gitcode.com/GitHub_Trending/da/data-engineering-zoomcamp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考