У меня возникли проблемы с корректной работой разных версий PySpark на моем компьютере с Windows в сочетании с разными версиями Python, установленными через PyEnv.
Настройка:
Python работает так, как ожидалось:
pyenv global <version>
python --version
в PowerShell, он всегда показывает версию, которую я установил ранее с помощью pyenv.Но у меня проблемы с PySpark.
Во-первых, я не могу запустить PySpark через консоль PowerShell, запустив pyspark
>>> The term 'pyspark' is not recognized as the name of a cmdlet, function, script file....
.
Что еще более досадно, мои репо-скрипты (с .venv, созданным с помощью pyenv и поэзии) также терпят неудачу:
Caused by: java.io.IOException: Cannot run program "python3": CreateProcess error=2, The system cannot find the file specified
[...] Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
Однако оба работают после того, как я добавляю следующие две записи в переменную среды PATH:
но мне пришлось бы «жестко запрограммировать» версию Python – а это именно то, чего я не хочу делать при использовании pyenv.
Если я жестко запрограммирую путь, даже если переключусь на другую версию Python (pyenv global 3.8.10
), как только я запущу pyspark
в Powershell, версия PySpark 3.4.1 начнется с записи PATH среды для Python 3.10.10. Я также не могу ничего сделать с Python в командной строке, поскольку он всегда указывает на жестко закодированную версию Python, независимо от того, что я делаю с pyenv.
Я надеялся, что смогу запустить PySpark 3.2.1 из Python 3.8.10, который я только что «активировал» с помощью pyenv во всем мире.
Что мне нужно сделать, чтобы иметь возможность переключаться между установками Python (и, следовательно, между PySparks) с помощью pyenv без «жесткого кодирования» путей Python?
Пример скрипта PySpark:
from pyspark.sql import SparkSession
spark = (
SparkSession
.builder
.master("local[*]")
.appName("myapp")
.getOrCreate()
)
data = [("Finance", 10),
("Marketing", 20),
]
df = spark.createDataFrame(data=data)
df.show(10, False)
Конечно, я использую virtualenv, и поэтика даже создает отдельные файлы для разных репозиториев. Но проблема здесь не в этом - проблема в том, что Windows не может вызывать версии Python/pyspark, динамически установленные pyenv, вместо этого мне приходится жестко запрограммировать переменные среды для определенных версий.
Я «решил» проблему, полностью удалив путь Python из переменной среды PATH
и сделав все исключительно через pyenv. Поскольку даже награда за этот вопрос не принесла ответов, то, полагаю, это означает, что это невозможно.
Я все еще могу запустить процесс Python, запустив pyenv exec python
в терминале.
Но, к сожалению, я больше не могу запустить искровой процесс с терминала.
По крайней мере, мои репозитории работают должным образом при установке версий pyenv (pyenv local 3.8.10
/pyenv global 3.10.10
).
Пробовали ли вы использовать отдельные виртуальные среды для версий pyspark? вы можете использовать что-то вроде pyenv-virtualenv