报错:Python in worker has different version 3.6 than that in driver 3.7, PySpark cannot run with different minor versions.Please check environment variables PYSPARK_PYTHON and PYSPARK_DRIVER_PYTHON are correctly set.
报错的大概意思就是说你的worker上的python版本为3.6而driver上的版本为3.7,版本不一致
1、背景
在日常开发中,我们的电脑上会安装多个版本的python或者多个虚拟环境,而每个虚拟环境中所安装的软件包版本可能不相同,通常我们会在~/.bashrc(家目录下的)或者/etc/profile(根目录下的)添加环境变量,如下图所示:
这样的好处,就是每次我们spark-submit的时候就不需要设置环境变量,其中 PYSPARK_PYTHON 就是worker运行的环境
PYSPARK_DRIVER_PYTHON就是driver的运行的环境。通常我们spark-submit时都能保证worker和driver的运行环境一致,且使用的环境就是anaconda目录下的环境(也是用的里面的包),但是有的时候我们要运行的脚本,在这个环境中缺少包,需要用到其他环境,就需要在脚本中额外指定PYSPARK_PYTHON和PYSPARK_DRIVER_PYTHON。
2、报错示例
上图就是我在~/.bashrc文件中设置的,而这个环境中没有fasttext包,所以在run.sh(文件名自定义的)的代码如下:
目录结构:
虚拟环境sear**-*ssociational-word-optimizing目录(解压conda_env.zip得到的) :
3、结论
1、要解决 Python in worker has different version 3.6 than that in driver 3.7不一致问题,请设置好PYSPARK_PYTHON和PYSPARK_DRIVER_PYTHON
2、要使用虚拟环境,请把它解压到某个目录,然后运行脚本时,指定好PYSPARK_PYTHON和PYSPARK_DRIVER_PYTHON,同时利用archieves参数,向其他节点分发该环境。(如果在其他节点上没有该环境)