apache-spark - 如何从 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 可执行文件?
解决方案
在创建 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()
推荐阅读
- javascript - Cheerio 获取部分标签内 p 标签的内容
- c# - C# 使用 Linq to XML 对 XML 文件进行排序
- python - 如何将所有窗口值传递给 pyspark UDF
- common-lisp - 如何使用 QTools 创建 QTreeWidget?
- momentjs - 使用 moment(Date.now()) 和简单地使用 moment() 有区别吗?
- php - 将英镑符号从数字之后移到数字之前
- elixir - Elixir Supervisor 因 :bad_return 错误而停止
- go - travis-ci 中的 go.mod 更改
- bash - 删除字符串列表中的字符linux
- python - 气流网络服务器未启动-UnicodeDecode 错误