首页 > 解决方案 > 如何从 Jupyter 笔记本中更改运行时 Spark 工作人员使用的 python 可执行文件

问题描述

我正在使用 YARN 和在主节点上运行的 Jupyterhub 设置 Spark 集群。我已经使用 conda 在所有节点上安装了 python 2 和 3,我希望用户能够指定他们执行代码的 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 的 Environment 选项卡时,这些值已正确设置。

但是,当我运行任何火花查询(例如计算 pi 示例)时,我得到Exception: Python in worker has different version 2.7 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.

如何从 Jupyter Notebook 中指定 python 可执行文件?

标签: apache-sparkpysparkjupyter

解决方案


在创建 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()

推荐阅读