)
一、什么是 PySpark在大数据开发领域Apache Spark一直是非常核心的分布式计算框架。而对于 Python 开发者来说最常接触的入口并不是 Scala而是PySpark。很多人第一次接触 PySpark 时会觉得它有点“拧巴”它叫 Python API但底层又离不开 JVM它可以pip install但又经常和 Java、Hadoop、Spark 版本扯上关系它看起来像普通 Python 包但有时候装完并不能马上跑起来所以PySpark 的难点并不在“安装命令怎么写”而在于你是否理解它的运行机制和依赖关系。这篇文章就从这个角度出发把 PySpark 安装这件事彻底讲透。PySpark本质上就是Apache Spark 的 Python API。你可以把它简单理解成三层Python 代码层你写DataFrame、RDD、SQL 等逻辑PySpark 层负责把 Python 调用转成 Spark 可理解的操作Spark 引擎层真正执行分布式计算通常运行在 JVM 上所以 PySpark 并不是一个完全独立的 Python 大数据框架它本质上还是依赖 Spark 的执行能力。而 Python 之所以能和 JVM 中的 Spark 通信中间有一个关键桥梁Py4J它负责打通 Python 和 Java 之间的调用链路。一句话概括PySpark Spark 的 Python 使用方式而不是脱离 Spark 独立存在的东西。二、PySpark 支持哪些 Python 版本根据你提供的官方说明当前支持的 Python 版本是Python3.10and above也就是说Python 3.10 ✅Python 3.11 ✅Python 3.12 ✅Python 3.9 及以下 ⚠️ 新版不推荐对于新环境建议直接使用Python 3.10 或 3.11这是目前比较稳妥的选择兼容性更好踩坑概率更低。三、PySpark 有哪些安装方式PySpark 常见安装方式主要有 4 种使用 pip 安装使用 Conda 安装手动下载 Spark 发行包安装从源码构建安装如果你只是本地学习、开发、调试最常用的通常是前两种。如果你是服务器部署、离线环境或者需要精确控制版本那么手动安装更常见。如果你是研究 Spark 内核或者做定制化构建那才会考虑源码安装。下面逐个来看。四、使用 pip 安装 PySpark对于绝大多数 Python 开发者来说最简单的安装方式就是pipinstallpyspark这是最基础、最常用的一种方式。它适合本地学习 Spark快速搭建开发环境在客户端连接远程 Spark 集群写 Demo、教程、测试代码1. 安装基础版pipinstallpyspark执行这条命令后就可以获得基础 PySpark 能力。2. 安装带扩展能力的 PySparkPySpark 支持通过 extras 方式安装不同模块需要的依赖。Spark SQLpipinstallpyspark[sql]Pandas API on Sparkpipinstallpyspark[pandas_on_spark]plotly这里额外安装plotly是为了更方便做可视化。Spark Connectpipinstallpyspark[connect]这种方式的优点非常明显你只安装自己需要的能力环境不会一上来就很臃肿更适合按需扩展这也是我比较推荐的做法。五、如何指定 Hadoop 版本PySpark 在 pip 安装时还支持通过环境变量指定 Hadoop 版本。例如PYSPARK_HADOOP_VERSION3pipinstallpyspark默认情况下官方发行版使用的是Hadoop 3.3Hive 2.3所以大多数情况下你即使不显式指定也会默认走这一套。1. 使用自定义镜像加速下载如果你网络环境一般或者希望指定镜像源可以这样写PYSPARK_RELEASE_MIRRORhttp://mirror.apache-kr.orgPYSPARK_HADOOP_VERSION3pipinstallpyspark2. 查看安装详细过程推荐加上-v参数PYSPARK_HADOOP_VERSION3pipinstallpyspark-v这样可以更清晰地看到下载和安装过程排查问题也更方便。3. 支持的值有哪些当前PYSPARK_HADOOP_VERSION常见支持值包括without不带 Hadoop由用户自己提供 Hadoop 环境3预构建支持 Hadoop 3.3 及以上版本默认值不过要注意一点这个能力是实验性的。也就是说它未来可能会调整甚至在某些小版本中发生变化。六、什么是pyspark-connect如果你想把Spark Connect作为默认方式可以安装pipinstallpyspark-connect这个包会自动安装pysparkSpark Connect 所需依赖它支持两类模式1. 使用spark.master适用于连接本地运行的 Spark Connect Server。2. 使用spark.remote适用于远程 URI 连接比如sc://localhost可以把 Spark Connect 理解成一种更现代、更灵活的连接模型。它把客户端和 Spark 服务端的交互做得更清晰也更适合一些远程开发和云原生场景。七、什么是pyspark-client除了pyspark-connect还有一个pipinstallpyspark-client这个包的特点是它是纯 Python 客户端不依赖本地 JAR不依赖本地 JRE只支持spark.remote通过 URI 连接 Spark Connect 服务端例如sc://localhost这意味着什么意味着它比传统 PySpark 更轻量但能力场景也更收敛。简单区分一下pyspark-connect自动带上pyspark更像“完整的 Spark Connect 使用方案”pyspark-client更轻更纯 Python适合只通过远程方式访问 Spark Connect 的场景很多人第一次看文档时最容易把这两个混在一起这里一定要分清。八、使用 Conda 安装 PySpark如果你平时主要使用 Anaconda、Miniconda、Miniforge 管理 Python 环境那么 Conda 安装 PySpark 也是一个不错的选择。1. 创建环境conda create-npyspark_env2. 激活环境conda activate pyspark_env3. 安装 PySparkcondainstall-cconda-forge pyspark你还可以顺便指定 Python 版本condainstall-cconda-forge pysparkpython3.104. Conda 安装的优点Conda 方式适合已经在使用 Conda 管理 Python 环境项目里还有很多科学计算依赖希望环境隔离更清晰不想污染系统 Python5. 需要注意什么官方说明里特别提到Conda 上的 PySpark 包并不是 Apache Spark 官方直接维护的而是社区维护的。这意味着新版一般会很快同步但不一定和官方发布时间完全一致个别版本可能略有延迟6. 为什么不建议在 Conda 环境里混用 pip这点很重要。虽然你在 Conda 环境里执行下面命令技术上通常是可行的pipinstallpyspark但官方并不推荐这么做。原因在于pip 不理解 conda 的依赖解析conda 也不会完全接管 pip 装进去的包混用后容易出现依赖冲突以后升级、回滚、排错都很痛苦一句话总结Conda 环境尽量用 Conda 装pip 环境尽量用 pip 装。九、手动下载安装 Spark 发行包如果你不想通过 pip 或 Conda 安装而是想更直接地控制 Spark 版本那么可以使用手动下载安装的方式。这种方式本质上是先下载 Spark 官方发布包解压到本地配置环境变量让 Python 能找到 PySpark 与 Py4J 相关文件1. 解压安装包tarxzvf spark-release-bin-hadoop3.tgz2. 进入目录并设置SPARK_HOMEcdspark-release-bin-hadoop3exportSPARK_HOMEpwd3. 设置PYTHONPATHexportPYTHONPATH$(ZIPS($SPARK_HOME/python/lib/*.zip);IFS:;echo${ZIPS[*]}):$PYTHONPATH4. 这种方式适合什么场景手动安装更适合服务器部署需要和指定 Spark 版本保持一致离线环境安装需要严格控制运行时环境想深入理解 PySpark 目录结构和依赖关系5. 它的缺点是什么缺点也很明显步骤多容易漏配环境变量对新手不太友好但对于运维、数据平台工程师、生产环境管理者来说这种方式反而更稳。十、从源码安装 PySpark如果你要从源码安装一般不是因为“我想用 PySpark”而是因为你要研究 Spark 内核修改 Spark 源码构建自定义版本体验还未正式发布的功能这种方式适合Spark 内核开发者框架贡献者企业内部做二次定制的团队普通开发者一般没有必要一开始就选这条路。十一、PySpark 的基础依赖有哪些PySpark 并不是装完就能完全独立运行的它有一些核心依赖。1. 必需依赖Py4J官方说明中明确提到py4j 0.10.9.9它的作用是帮助 Python 与 JVM 通信。因为 Spark 本体是跑在 JVM 世界里的而你写的是 Python所以必须有一个桥梁把两边接起来这个桥梁就是 Py4J。2. Java 依赖PySpark 还要求Java 17 or later也就是说你需要安装 Java 17 或更高版本正确设置JAVA_HOME这个点非常关键。很多同学安装完pyspark后一执行程序就报错根本原因不是 PySpark 没装好而是没装 JavaJava 版本太低JAVA_HOME没配置PATH 配置不正确建议安装完后先检查java-version以及echo$JAVA_HOME如果你是 Windows则可以在 CMD 里执行java-versionecho%JAVA_HOME%十二、不同功能模块依赖什么这部分是很多人最容易忽略的地方。因为pip install pyspark只能保证你有“基础 PySpark 能力”但一旦你开始使用某些高级模块就可能出现ImportError ModuleNotFoundError所以一定要知道不同模块有不同的依赖要求。1. Spark Connect安装方式pipinstallpyspark[connect]需要的依赖包括pandas 2.2.0pyarrow 15.0.0grpcio 1.76.0grpcio-status 1.76.0googleapis-common-protos 1.71.0zstandard 0.25.0可选依赖graphviz 0.20这也说明了 Spark Connect 的实现和传统方式不一样它更依赖ArrowgRPC协议化通信能力2. Spark SQL安装方式pipinstallpyspark[sql]需要pandas 2.2.0pyarrow 15.0.0额外增强依赖flameprof如果你主要用 DataFrame、SQL 分析那么这一组就比较常见。3. Pandas API on Spark安装方式pipinstallpyspark[pandas_on_spark]需要pandas 2.2.0pyarrow 15.0.0可选增强依赖mlflowplotlymatplotlib其中官方更推荐plotly。如果你是从 Pandas 过渡到 PySpark这一模块会非常友好因为写法会更接近你熟悉的 Pandas 风格。4. MLlib DataFrame-based API安装方式pipinstallpyspark[ml]需要numpy 1.22额外增强依赖scipyscikit-learntorchtorchvisiontorchevaldeepspeed这个方向更偏机器学习和训练场景。5. MLlib安装方式pipinstallpyspark[mllib]需要numpy 1.226. Declarative Pipelines安装方式pipinstallpyspark[pipelines]这一模块依赖更完整因为它建立在 Spark SQL 与 Spark Connect 之上。依赖包括pandas 2.2.0pyarrow 15.0.0grpcio 1.76.0grpcio-status 1.76.0googleapis-common-protos 1.71.0zstandard 0.25.0pyyaml 3.11可选graphviz 0.20十三、实战推荐的本地安装方案如果你现在就是想在自己电脑上快速搭一个可用的 PySpark 开发环境我给你一个非常实用的推荐。方案 1最简单起步版python-mvenv venvLinux/macOS 激活sourcevenv/bin/activateWindows 激活venv\Scripts\activate然后安装pipinstallpyspark适合入门学习基础练习本地 Demo方案 2做 Spark SQL 分析pipinstallpyspark[sql]适合DataFrame 处理SQL 分析ETL 练习方案 3想体验类 Pandas 写法pipinstallpyspark[pandas_on_spark]plotly适合Pandas 用户迁移到分布式计算做类 Pandas 风格的数据分析方案 4体验 Spark Connectpipinstallpyspark[connect]适合学习 Spark Connect远程开发新架构实践安装完成后不要急着写业务代码先验证 Javajava-version确保版本至少是Java 17十四、安装完成后如何验证安装完之后建议先运行一个最简单的测试。1. 进入 Python 交互环境python2. 执行以下代码frompyspark.sqlimportSparkSession sparkSparkSession.builder \.appName(PySparkTest)\.master(local[*])\.getOrCreate()dfspark.createDataFrame([(1,Alice),(2,Bob),(3,Cindy)],[id,name])df.show()spark.stop()3. 如果输出类似下面内容说明环境基本正常-------- | id| name| -------- | 1|Alice| | 2| Bob| | 3|Cindy| --------这一步非常重要。很多人以为“安装命令执行成功了”就代表没问题其实不一定。真正能跑通一个最小示例才说明环境是可用的。十五、最容易踩的坑与排查方式下面这部分几乎每个新手都会遇到建议收藏。1. 报错找不到 Java /JAVA_HOME未设置常见现象启动 SparkSession 时报错提示找不到 Java提示JAVA_HOME is not set排查方式java-version如果提示命令不存在说明 Java 根本没装。如果版本太低也要升级。同时检查环境变量Linux/macOSecho$JAVA_HOMEWindowsecho%JAVA_HOME%2. 报错Python 版本不兼容如果你用的是比较旧的 Python比如 3.8、3.9那么新版 PySpark 可能装不上或者运行异常。建议直接升级到Python 3.10Python 3.113. 报错缺少pandas、pyarrow、grpcio这种情况通常是因为你只安装了基础版pipinstallpyspark但你实际却在用Spark SQL 增强能力Pandas API on SparkSpark Connect这时就要按模块补装依赖例如pipinstallpyspark[sql]或者pipinstallpyspark[connect]4. Conda 和 pip 混装导致环境混乱这是非常高频的问题。比如你先condainstallpyspark后来又pipinstallpandas pyarrow grpcio表面上看没问题实际后面升级时极容易冲突。建议策略很简单用 Conda 就尽量全程 Conda用 pip 就尽量全程 pip5. 误解pyspark-connect和pyspark-client很多人会误以为这两个是一个东西其实不是pyspark-connect更完整更偏“正式使用 Spark Connect 的一整套依赖方案”pyspark-client更轻量纯 Python适合仅做远程 URI 连接这个一定要分清。十六、安装方式怎么选一张思路图搞定如果你现在还在纠结该选哪种安装方式可以直接按下面的思路判断。1. 我只是学习 PySpark选pipinstallpyspark2. 我平时就用 Conda 管环境选condainstall-cconda-forge pyspark3. 我需要和线上 Spark 版本严格一致选手动下载 Spark 发行包配置SPARK_HOME配置PYTHONPATH配置JAVA_HOME4. 我在研究 Spark 源码或做定制开发选从源码构建其实说白了学习阶段先跑起来最重要生产阶段可控性最重要。十七、FAQ几个高频问题一次答清Q1安装 PySpark 还需要单独安装 Spark 吗如果你使用的是pipinstallpyspark那么通常不需要你手动再下载一份 Spark 压缩包。因为 pip 安装的 PySpark 已经包含了相关运行时支持。但如果你走的是手动下载 Spark 发行版服务器统一部署特定版本控制那就需要自己准备 Spark 包。Q2安装 PySpark 一定要装 Hadoop 吗不一定。大多数本地学习场景下不需要你单独装 Hadoop 集群。很多时候PySpark 的预构建包已经能满足本地使用需求。Q3安装 PySpark 一定要装 Java 吗是的绝大多数常规 PySpark 场景都需要 Java。因为 Spark 本身运行在 JVM 之上。只有某些更轻量、纯 Python 的 Spark Connect Client 场景才会减少对本地 JRE 的依赖。Q4我只想写 SQL装哪个最合适推荐pipinstallpyspark[sql]Q5我本来是 Pandas 用户想平滑过渡到 PySpark装哪个推荐pipinstallpyspark[pandas_on_spark]plotlyQ6生产环境推荐 pip 还是手动安装如果是企业生产环境一般更倾向手动下载安装包统一版本控制环境变量显式配置因为这样更稳更方便治理。十八、总结PySpark 安装这件事表面看像是“敲一条命令”但真正影响你后续开发体验的其实是对以下三件事的理解1. 你要解决什么场景本地学习开发调试客户端连接服务器部署源码研究2. 你需要哪些功能模块基础 PySparkSpark SQLPandas API on SparkSpark ConnectMLlibDeclarative Pipelines3. 你的环境准备好了没有Python 3.10Java 17JAVA_HOME正确的扩展依赖所以PySpark 安装真正的关键不是“命令会不会背”而是知道自己装的是什么、为什么这样装、装完以后靠什么跑起来。