#apache-spark #pyspark #jupyter
#apache-spark #pyspark #jupyter
Вопрос:
Я настраиваю кластер Spark с использованием YARN с Jupyterhub, запущенным на главном узле. Я установил python 2 и 3 на всех узлах с помощью conda, и я хочу, чтобы пользователи могли указывать, с какой версией Python они выполняют код. Это необходимо, поскольку некоторые библиотеки, используемые в UDFS Python, еще не поддерживают 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 двумя разными способами. При просмотре вкладки Environment пользовательского интерфейса Spark эти значения установлены правильно.
Однако, когда я запускаю любой запрос spark (например, пример вычисления 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.
Как я могу указать исполняемый файл python из записной книжки Jupyter?
Ответ №1:
Вы можете принудительно использовать переменные среды в python из своей записной книжки перед созданием сеанса spark.
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()
Комментарии:
1. Спасибо! Пока установка переменных env в конфигурации ядра Jupyter не установит их в записной книжке, в которой запущено это ядро.