PySpark集群Python版本冲突:设置环境变量后仍报错求助
Spark集群包含1台Driver节点和2台Worker节点,Driver节点使用Python 3.9。运行PySpark代码时出现版本不匹配错误:
RuntimeError: Python in worker has different version 3.6 than that in driver 3.9, PySpark cannot run with different minor versions. Please check environment variables PYSPARK_PYTHON and PYSPARK_DRIVER_PYTHON are correctly set.
已在Driver和Worker节点设置环境变量:
export PYSPARK_PYTHON=/location/bin/python3.9 export PYSPARK_DRIVER_PYTHON=/location/bin/python3.9
但错误仍未解决,求可行解决方法。
确认环境变量生效范围
在Worker节点执行echo $PYSPARK_PYTHON,检查输出是否为/location/bin/python3.9。如果输出不符,说明环境变量未正确生效:- 临时终端命令设置的变量会在进程重启后失效,需将变量写入全局配置文件(如
/etc/profile、~/.bashrc或Spark的spark-env.sh)。 - 写入后执行
source /etc/profile(对应配置文件)刷新,再重启Spark Worker服务。
- 临时终端命令设置的变量会在进程重启后失效,需将变量写入全局配置文件(如
检查Spark配置文件优先级
Spark配置文件优先级高于系统环境变量,需确保spark-defaults.conf未覆盖Python路径:
打开$SPARK_HOME/conf/spark-defaults.conf,添加或修改以下配置:spark.pyspark.python /location/bin/python3.9 spark.pyspark.driver.python /location/bin/python3.9保存后重启整个Spark集群(Driver和Worker)。
验证Worker节点Python路径有效性
在Worker节点执行/location/bin/python3.9 --version,确认该路径存在且版本为3.9。若路径不存在,用whereis python3.9查找Worker节点上实际的Python3.9安装路径,替换配置中的路径。检查Worker进程环境变量
部分场景下,Worker进程启动时不会加载用户bash配置,导致环境变量失效:
用ps aux | grep spark-worker找到Worker进程PID,执行cat /proc/<PID>/environ | tr '\0' '\n' | grep PYSPARK,查看变量值是否正确。若不正确,需在Spark Worker启动脚本中直接指定环境变量。代码中强制指定Python路径
若以上方法无效,可在PySpark代码开头直接设置:from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("YourAppName") \ .config("spark.pyspark.python", "/location/bin/python3.9") \ .config("spark.pyspark.driver.python", "/location/bin/python3.9") \ .getOrCreate()
内容的提问来源于stack exchange,提问作者Sherwin R

