如何让PySpark/Spark兼容Python2与Python3并默认使用Python3.6运行?
如何在本地让PySpark在Python2和Python3之间切换/同时运行?
嘿,我来帮你搞定这个问题——在本地同时折腾多Python版本适配Spark确实是个挺常见的需求,不管是临时切换版本还是默认改成Python3.6,都有简单可行的办法:
一、临时切换版本(单次运行生效,支持同时跑两个版本)
这种方式最灵活,不会改动全局配置,想跑哪个版本就临时指定,甚至可以开两个终端同时运行Python2和Python3的PySpark:
- 启动Python3.6版PySpark:直接在终端里执行
(如果你的Python3.6在系统PATH里可以直接用PYSPARK_PYTHON=/usr/bin/python3.6 pysparkpython3.6,不确定路径的话用which python3.6命令就能查到) - 提交Spark作业时用Python3.6:
PYSPARK_PYTHON=/usr/bin/python3.6 spark-submit your_spark_script.py - 要是想切回Python2.7,只需要把
PYSPARK_PYTHON的值换成python2或者你的Python2.7路径就行,比如:PYSPARK_PYTHON=python2 pyspark
二、永久默认切换到Python3.6
如果想让每次启动PySpark都默认用Python3.6,直接修改Spark的配置文件就行:
- 找到Spark的配置目录,一般是
$SPARK_HOME/conf(如果没设置SPARK_HOME环境变量,就找你安装Spark的文件夹里的conf子目录) - 在
conf目录下,新建或修改spark-env.sh文件(Windows系统对应的是spark-env.cmd):- Linux/macOS:在文件末尾添加一行
export PYSPARK_PYTHON=/usr/bin/python3.6 - Windows:在
spark-env.cmd里添加set PYSPARK_PYTHON=C:\your\path\to\python3.6.exe
- Linux/macOS:在文件末尾添加一行
- 保存文件后,下次再启动PySpark或者提交作业,就会自动用Python3.6运行了。要是偶尔需要用Python2.7,还是可以用上面的临时方法覆盖这个全局配置。
小提醒
别忘了确认你的Python3.6环境里安装了py4j——PySpark是靠这个库和Java端通信的。可以用下面的命令安装(最好和Spark自带的py4j版本匹配,你可以在$SPARK_HOME/python/lib目录下找到对应的py4j jar包版本):
pip3.6 install py4j==<对应版本号>
内容的提问来源于stack exchange,提问作者Joe Ganser




