Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何从Jupyter笔记本中更改spark workers在运行时使用的python可执行文件_Apache Spark_Pyspark_Jupyter - Fatal编程技术网

Apache spark 如何从Jupyter笔记本中更改spark workers在运行时使用的python可执行文件

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", "{

我正在使用在主节点上运行Jupyterhub的纱线设置Spark群集。我已经使用conda在所有节点上安装了Python2和Python3,我希望用户能够指定使用哪个版本的python执行代码。这是必要的,因为Python UDF中使用的一些库还不支持Python 3

我已经创建了内核配置文件

{
    "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变量不会在运行该内核的笔记本中设置它们。