Как изменить исполняемый файл python, используемый spark workers во время выполнения, из записной книжки Jupyter

#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 не установит их в записной книжке, в которой запущено это ядро.