Azure DevOps CI/CD中pyspark.testing模块导入失败问题求助
解决PySpark
pyspark.testing 模块找不到的问题 问题原因
官方从PyPI发布的PySpark包(包括你安装的3.4.1版本)默认不包含pyspark.testing模块——查看Spark源码的setup.py会发现,该模块并未被加入正式发布的packages列表。而Databricks环境中的PySpark是经过定制优化的版本,额外包含了这个测试相关模块,因此你在本地和流水线的标准PySpark环境中会遇到找不到模块的错误。
解决方案
以下是几种在Azure DevOps流水线中可用的解决方法:
方法1:从Spark源码中引入testing模块
直接下载对应版本的Spark源码,将pyspark/testing目录加入Python路径:
- script: | export PYTHONPATH=${PYTHONPATH}:$(pwd) pip install pyspark==3.4.1 # 下载与安装版本匹配的Spark源码 curl -L https://github.com/apache/spark/archive/refs/tags/v3.4.1.tar.gz | tar xz # 将源码中的testing目录加入PYTHONPATH export PYTHONPATH=${PYTHONPATH}:$(pwd)/spark-3.4.1/python # 执行单元测试 python -m unittest discover -s databricks/test/unittest -t . displayName: 'Run unittests'
方法2:复制testing模块到项目目录
如果不想依赖源码路径,可以直接将testing模块复制到项目的pyspark目录下(确保项目目录已在PYTHONPATH中):
- script: | export PYTHONPATH=${PYTHONPATH}:$(pwd) pip install pyspark==3.4.1 # 下载对应版本的Spark源码 curl -L https://github.com/apache/spark/archive/refs/tags/v3.4.1.tar.gz | tar xz # 复制testing模块到项目的pyspark目录 cp -r spark-3.4.1/python/pyspark/testing $(pwd)/pyspark/ # 执行单元测试 python -m unittest discover -s databricks/test/unittest -t . displayName: 'Run unittests'
方法3:使用Databricks官方PySpark包(可选)
如果你的项目紧密依赖Databricks环境,可以直接安装Databricks提供的PySpark包替代官方版本(注意版本兼容性):
- script: | export PYTHONPATH=${PYTHONPATH}:$(pwd) # 安装Databricks PySpark包(以3.4.1对应版本为例) pip install databricks-pyspark==3.4.1 python -m unittest discover -s databricks/test/unittest -t . displayName: 'Run unittests'
注意事项
- 务必保证下载的Spark源码版本与你安装的PySpark版本完全一致,避免出现兼容性问题;
- 方法3中的
databricks-pyspark包版本需与Databricks Runtime版本对应,建议提前确认版本匹配关系。
内容的提问来源于stack exchange,提问作者Mario van Rooij
相关产品推荐
相关产品推荐

