其实这个异常百度一下,大部分都是添加环境变量,修改conf/spark-env.sh文件,主要就是加入或修改 PYSPARK_PYTHON 和PYSPARK_DRIVER_PYTHON这两个环境变量,这都是老生常谈的问题了,在此我就不赘述了。
但我最近在使用spark远程master结点进行编程的时候,发现无论怎么做这个异常都一直存在,颇为苦恼。
首先,要明确的一点就是你的操作系统中一定存在两个版本的python才会导致这个问题。然后,于是我根据错误提示
File "/opt/spark/python/lib/pyspark.zip/pyspark/worker.py", line 175, in main
定位到对应代码,看看究竟是为什么。
以下是worker.py异常处理的源码:
def main(infile, outfile): try: boot_time = time.time() split_index = read_int(infile) if split_index == -1: # for unit tests exit(-1) version = utf8_deserializer.loads(infile) if version != "%d.%d" % sys.version_info[:2]: raise Exception(("Python in worker has different version %s than that in " + "driver %s, PySpark cannot run with different minor versions." + "Please check environment variables PYSPARK_PYTHON and " + "PYSPARK_DRIVER_PYTHON are correctly set.") % ("%d.%d" % sys.version_info[:2], version)) ······
似乎有点懂了,应该是链接错误导致的,可以在终端输入python命令,看是不是对应到异常中的前一个版本(worker),如果是的话,那把软链接重新设置成driver所需要的版本即可。
ln -sb /path/to/your/python3/bin/python3 /usr/bin/python
阿西吧,就这点破事耽误了我一下午。