Apache spark 如何从Jupyter笔记本中更改spark workers在运行时使用的python可执行文件
我正在使用在主节点上运行Jupyterhub的纱线设置Spark群集。我已经使用conda在所有节点上安装了Python2和Python3,我希望用户能够指定使用哪个版本的python执行代码。这是必要的,因为Python UDF中使用的一些库还不支持Python 3 我已经创建了内核配置文件Apache spark 如何从Jupyter笔记本中更改spark workers在运行时使用的python可执行文件,apache-spark,pyspark,jupyter,Apache Spark,Pyspark,Jupyter,我正在使用在主节点上运行Jupyterhub的纱线设置Spark群集。我已经使用conda在所有节点上安装了Python2和Python3,我希望用户能够指定使用哪个版本的python执行代码。这是必要的,因为Python UDF中使用的一些库还不支持Python 3 我已经创建了内核配置文件 { "argv": [ "python", "-m", "ipykernel_launcher", "-f", "{
{
"argv": [
"python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
],
"display_name": "Python 3",
"language": "python",
"env": {
"PYSPARK_PYTHON": "python3",
"PYSPARK_DRIVER_PYTHON": "/opt/anaconda/envs/py3/bin/python"
}
}
指向正确的python可执行文件,并使用
spark = pyspark.sql.SparkSession \
.builder \
.appName("MyApp") \
.config("spark.pyspark.python", "/opt/anaconda/envs/py3/bin/python")\
.config("spark.executorEnv.PYTHONPATH", "/opt/anaconda/envs/py3/bin/python")\
.getOrCreate()
它还以两种不同的方式设置python可执行文件。查看Spark UI的环境选项卡时,这些值已正确设置
但是,当我运行任何spark查询(例如,计算pi示例)时,我会得到异常:worker中的Python与driver 3.7中的Python版本不同,PySpark无法使用不同的次要版本运行。请检查环境变量PySpark_Python和PySpark_driver_Python是否正确设置。
如何从Jupyter笔记本中指定python可执行文件?在创建spark会话之前,可以从笔记本中强制使用python中的环境变量
import os
os.environ['PYSPARK_PYTHON'] = '/opt/anaconda/envs/py3/bin/python'
os.environ['PYSPARK_DRIVER_PYTHON'] = '/opt/anaconda/envs/py3/bin/python'
# ....
spark = SparkSession.getOrCreate()
谢谢TIL在Jupyter内核配置中设置env变量不会在运行该内核的笔记本中设置它们。