导入pyspark.pandas报错:无法从pyspark.cloudpickle导入print_exec
问题根因
该报错与路径配置无关,核心原因是版本不匹配:
pyspark.pandas(原Koalas项目)是从PySpark 3.2.0 版本开始才正式并入PySpark主分支的内置模块,你当前安装的3.1.3版本本身没有内置该模块。- PySpark 3.1.3自带的
pyspark.cloudpickle模块未导出print_exec对象,当环境中存在残留的高版本PySpark文件、或是安装了适配高版本PySpark的pandas API相关包时,导入流程会尝试从低版本cloudpickle中拉取高版本才存在的方法,直接触发该ImportError。
环境路径校验方法
如果需要排查是否存在多环境串包问题,可按以下步骤校验:
- 校验当前Python解释器实际加载的PySpark信息,在交互环境执行以下代码:
import pyspark # 打印PySpark实际加载路径 print(pyspark.__file__) # 打印当前加载的PySpark版本 print(pyspark.__version__)
输出的路径需匹配你当前使用的Anaconda环境下的site-packages路径,版本号需和你预期安装的版本一致,排除多Python环境(系统Python、虚拟环境、conda环境)混装PySpark导致的加载错误。
- 校验cloudpickle模块的导出对象,执行以下代码:
from pyspark import cloudpickle # 校验print_exec是否存在于当前cloudpickle模块的导出列表中 print("print_exec" in dir(cloudpickle))
PySpark 3.1.3环境下该语句会返回False,可直接验证当前版本确实缺失对应方法。
解决方法
- 推荐方案:升级PySpark至3.2.0及以上稳定版本,适配课程作业需求优先选3.3.x或3.4.x版本,兼容性更好。在Anaconda Prompt中执行对应安装命令即可:
- conda环境安装:
conda install pyspark=3.3.2 - pip安装:
pip install --upgrade pyspark==3.3.2
安装完成后重启Python内核/IDE,重新执行导入语句即可正常运行。
- conda环境安装:
- 固定版本方案:如果课程要求必须使用PySpark 3.1.3,不要强行使用内置
pyspark.pandas,单独安装适配3.1.x版本的独立Koalas包即可:
执行安装命令:pip install koalas==1.8.2
后续导入时将语句替换为import databricks.koalas as ps,接口逻辑和pyspark.pandas完全一致,可满足作业使用需求。
注意:不要手动修改site-packages目录下的PySpark源码补全
print_exec方法,会触发后续数据处理流程中大量连锁的版本兼容问题,没有实际使用价值。
内容的提问来源于stack exchange,提问作者Smith
相关产品推荐
相关产品推荐

