PySpark 依赖包管理

最近更新时间:2026-05-06 16:28:12

我的收藏

简介

运行环境 TCHouse-X PySpark 默认基础环境为 Python 3.9.2。
依赖提交方式您可以通过以下两种方式配置作业依赖,且两者可根据需求并行使用:
1. 使用 --py-files 指定依赖:若您的依赖项为纯 Python 实现的模块或脚本,建议优先使用此方式,直接上传相关文件即可。
2. 使用 --archives 挂载虚拟环境:若您的项目依赖较复杂,或包含需要编译安装的 C 相关依赖(如深度学习库、科学计算库),推荐将整个开发测试环境打包,并通过 --archives 方式分发,以保证运行环境的完整性。

使用 --py-files 依赖包

该方式适用于纯 Python 实现的模块或文件,其中未包含任何 C 依赖。

步骤一:打包模块/文件

PyPI 外部包,需要在本地环境中,使用 pip 指令安装并打包常用依赖,要求依赖包使用纯 Python 实现,不依赖 C 相关库。
pip install -i https://mirrors.tencent.com/pypi/simple/ <packages...> -t dep

cd dep

zip -r ../dep.zip .
单文件模块(functions.py)和自定义 Python 模块都可以通过上述方法打包,需要注意的是自定义 Python 模块需要按照 Python 官方要求标准化,详情可参考 Python 官方文档 Python Packaging User Guide

步骤二:引入打包好的模块

TCHouse-X 控制台 的数据作业模块中新建作业。在--py-files参数中引入打包好的 dep.zip 文件,该文件可以通过上传到 COS 或者本地上传的方式引入。




使用虚拟环境

使用虚拟环境可以有效解决 Python 依赖包(尤其是涉及 C 扩展的包,如 numpy, pandas, jieba 等)在分布式集群中的兼容性问题。通过将依赖预编译并打包上传,可以确保作业运行环境的一致性。

前置要求:打包环境建议

由于部分 Python 依赖涉及 C 语言编译,为保证与计算节点环境兼容,强烈建议在以下环境中进行打包:
架构:x86_64
操作系统:Debian 11 (bullseye)
Python 版本:3.9.2

步骤一:打包虚拟环境

我们提供了三种打包方式,您可以根据习惯选择其一。

方法 1:使用 Venv 打包

适用于依赖较少、环境简单的场景。
# 1. 创建虚拟环境
python3 -m venv pyspark_venv

# 2. 激活并安装依赖(建议使用腾讯云镜像源加速)
source pyspark_venv/bin/activate
pip3 install -i https://mirrors.tencent.com/pypi/simple/ <依赖包名>

# 3. 退出并压缩
# 注意:必须使用 tar 命令打包,确保链接文件不丢失
deactivate
tar -czvf pyspark_venv.tar.gz pyspark_venv/

方法 2:使用 Conda 打包

适用于复杂依赖管理,建议配合 conda-pack 使用以确保环境完整迁移。
# 1. 创建环境并安装 conda-pack
conda create -y -n pyspark_env python=3.9.2 conda-pack <其他包名>

# 2. 激活环境
conda activate pyspark_env

# 3. 使用 conda-pack 导出环境
conda pack -f -o pyspark_env.tar.gz

方法 3:使用 Docker 自动化脚本打包

如果您本地有 Docker 环境(支持 Linux/Mac),可以使用我们提供的自动化脚本。该脚本会自动在标准 Debian 镜像中完成编译。
脚本参数说明:
参数
描述
备注
-r
指定 requirements.txt 路径
必填
-n
指定虚拟环境及输出压缩包的名称
默认:py3env
-o
指定保存本地的目录
默认:当前目录
-h
打印帮助信息
-

步骤二:上传并配置虚拟环境

Step1: 上传资源

上传资源:将打包好的 .tar.gz 文件(如 py3env.tar.gz)上传至您的 COS(对象存储) 中。

Step2:配置 --archives 参数(环境挂载)

在作业配置界面的 --archives 参数项中,填入虚拟环境包的完整资源路径。
格式: [资源路径]#[解压文件夹名称]
示例: cosn://mybucket/envs/python_env.tar.gz#venv

说明:
符号 # 用于指定压缩包在计算节点上的解压目录名称。该名称(如上例中的 venv)将直接影响后续运行环境参数的选择,请务必保持一致。

Step3:配置 --config 参数(指定解释器)

为了让 Spark 任务识别并调用虚拟环境,需通过 --config 明确 Python 解释器的相对路径。请根据您的打包方式选择对应的路径:
打包方式
推荐配置项与路径
说明
Venv 打包
spark.pyspark.python=venv/pyspark_venv/bin/python3
默认 venv 结构通常多一层目录
Conda 打包
spark.pyspark.python=venv/bin/python3
常用 Conda 打包后的标准路径
脚本打包
spark.pyspark.python=venv/bin/python3
自定义脚本封装的常用路径
venv 打包示例:

说明:
路径验证:venvconda 因打包工具及参数不同,内部目录层级可能存在差异。
手动核对:若任务运行报错(找不到文件),建议先在本地解压 .tar.gz 包,确认 python3 可执行文件相对于根目录的具体位置。
参数引用:配置项中的 venv/ 前缀必须与第一步中 # 号后的名称严格对应。