AWS Linux2环境使用Anaconda Python启动PySpark会话报错如何解决
问题根因
- 环境变量配置路径错误:你将PYSPARK_*变量写入了
/etc/skel/.bashrc,该路径是系统创建新用户时的默认配置模板,不会对现有用户生效,因此执行source ~/.bashrc无法读取到对应的环境变量。 - 版本不兼容报错:你遇到的
TypeError: an integer is required (got type bytes)是旧版本PySpark自带的cloudpickle库不兼容Python3.8+导致的,AWS Linux2默认预装的Spark版本多为2.4.x,该版本最高仅支持Python3.7。
修复步骤
第一步:修正PySpark环境变量配置
两种配置方式可按需选择:
方式1:仅对当前用户生效
tee -a ~/.bashrc <<"EOF" export PYSPARK_PYTHON="/apps/softwares/anaconda3/bin/python" export PYSPARK_DRIVER_PYTHON="/apps/softwares/anaconda3/bin/python" EOF source ~/.bashrc
方式2:对所有系统用户生效
sudo tee -a /etc/profile <<"EOF" export PYSPARK_PYTHON="/apps/softwares/anaconda3/bin/python" export PYSPARK_DRIVER_PYTHON="/apps/softwares/anaconda3/bin/python" EOF source /etc/profile
配置完成后执行echo $PYSPARK_PYTHON,确认输出为Anaconda的Python路径即配置生效。
第二步:修复版本不兼容报错
两种方案可按需选择:
方案A:升级Spark版本(推荐)
将系统预装的Spark2.x升级到Spark3.0+,Spark3.0及以上版本原生支持Python3.8+,无需额外修改依赖。
方案B:替换Spark自带的cloudpickle库(无需升级Spark)
如果无法升级Spark,直接用Anaconda环境中的新版cloudpickle替换Spark自带的旧版本即可:
# 安装新版cloudpickle pip install cloudpickle # 备份Spark自带的旧版本文件 sudo mv /usr/lib/spark/python/pyspark/cloudpickle.py /usr/lib/spark/python/pyspark/cloudpickle.py.bak # 复制新版cloudpickle到Spark依赖目录 sudo cp /apps/softwares/anaconda3/lib/python3.8/site-packages/cloudpickle/cloudpickle.py /usr/lib/spark/python/pyspark/
第三步:验证修复效果
执行pyspark命令,能够正常进入Spark交互界面且无报错即修复完成。
内容的提问来源于stack exchange,提问作者D'lips
相关产品推荐
相关产品推荐

