импорт pyspark в оболочке python
Это копия чужого вопроса на другом форуме, на который никогда не было ответа, поэтому я подумал, что переспрошу его здесь, так как у меня такая же проблема. (См. http://geekple.com/blogs/feeds/Xgzu7/posts/351703064084736)
Я правильно установил Spark на своей машине и могу запускать программы python с модулями pyspark без ошибок при использовании ./bin / pyspark как мой интерпретатор python.
однако, когда я пытаюсь запустить обычная оболочка Python, когда я пытаюсь импортировать модули pyspark, я получаю эту ошибку:
from pyspark import SparkContext
и говорит
"No module named pyspark".
Как я могу это исправить? Есть ли переменная среды, которую мне нужно установить, чтобы указать Python на заголовки/библиотеки/и т. д. pyspark.? Если моя установка spark - это /spark/, какие пути pyspark мне нужно включить? Или программы pyspark можно запускать только из интерпретатора pyspark?
16 ответов:
вот простой способ (Если вы не беспокоитесь о том, как это работает!!!)
использовать findspark
перейдите в свою оболочку python
pip install findspark import findspark findspark.init()
импорт необходимых модулей
from pyspark import SparkContext from pyspark import SparkConf
готово!!!
если он печатает такую ошибку:
ImportError: нет модуль с именем py4j.java_gateway
пожалуйста, добавьте $SPARK_HOME / python / build в PYTHONPATH:
export SPARK_HOME=/Users/pzhang/apps/spark-1.1.0-bin-hadoop2.4 export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH
оказывается, что PySpark bin загружает python и автоматически загружает правильные пути к библиотеке. Проверьте $SPARK_HOME / bin/pyspark:
# Add the PySpark classes to the Python path: export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
Я добавил эту строку, чтобы мой .файл bashrc и модули теперь правильно нашли!
экспортируя путь SPARK и путь Py4j, он начал работать:
export SPARK_HOME=/usr/local/Cellar/apache-spark/1.5.1 export PYTHONPATH=$SPARK_HOME/libexec/python:$SPARK_HOME/libexec/python/build:$PYTHONPATH PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.8.2.1-src.zip:$PYTHONPATH export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH
Итак, если вы не хотите вводить их каждый раз, когда вы хотите запустить оболочку Python, вы можете добавить ее в свой
.bashrc
file
на Mac я использую Homebrew для установки Spark (формула "apache-spark"). Затем я устанавливаю PYTHONPATH таким образом, чтобы импорт Python работал:
export SPARK_HOME=/usr/local/Cellar/apache-spark/1.2.0 export PYTHONPATH=$SPARK_HOME/libexec/python:$SPARK_HOME/libexec/python/build:$PYTHONPATH
замените "1.2.0" на фактическую версию apache-spark на вашем mac.
для выполнения Spark в pyspark требуются два компонента для совместной работы:
pyspark
пакет python- экземпляр Spark в JVM
при запуске вещей с spark-submit или pyspark эти скрипты позаботятся о обоих, т. е. они настроят ваш PYTHONPATH, PATH и т. д., Чтобы ваш скрипт мог найти pyspark, а также запустить экземпляр spark, настроив его в соответствии с вашими параметрами, например --master X
кроме того, можно обойти эти сценарии и запустить приложение spark непосредственно в интерпретаторе python, например
python myscript.py
. Это особенно интересно, когда скрипты spark начинают усложняться и в конечном итоге получают свои собственные args.ваш скрипт может иметь что-то вроде этого:
- убедитесь, что пакет pyspark может быть найден интерпретатором Python. Как уже обсуждалось, либо добавьте spark/python dir в PYTHONPATH, либо непосредственно установите pyspark с помощью pip установить.
- установите параметры экземпляра spark из вашего скрипта (те, которые раньше передавались в pyspark).
- для конфигураций spark, которые вы обычно устанавливаете с помощью --conf, они определяются с помощью объекта config (или строковых конфигураций) в SparkSession.строитель.конфигурации
- для основных параметров (например, --master или --driver-mem) на данный момент Вы можете установить их, записав в переменную среды PYSPARK_SUBMIT_ARGS. Чтобы сделать вещи чище и безопаснее, вы можете установить его из самого Python, и spark будет читать его при запуске.
- запустите экземпляр, который просто требует, чтобы вы позвонили
getOrCreate()
из объекта builder.from pyspark.sql import SparkSession if __name__ == "__main__": if spark_main_opts: # Set main options, e.g. "--master local[4]" os.environ['PYSPARK_SUBMIT_ARGS'] = spark_main_opts + " pyspark-shell" # Set spark config spark = (SparkSession.builder .config("spark.checkpoint.compress", True) .config("spark.jars.packages", "graphframes:graphframes:0.5.0-spark2.1-s_2.11") .getOrCreate())
чтобы избавиться от
ImportError: No module named py4j.java_gateway
, вам нужно добавить следующие строки:import os import sys os.environ['SPARK_HOME'] = "D:\python\spark-1.4.1-bin-hadoop2.4" sys.path.append("D:\python\spark-1.4.1-bin-hadoop2.4\python") sys.path.append("D:\python\spark-1.4.1-bin-hadoop2.4\python\lib\py4j-0.8.2.1-src.zip") try: from pyspark import SparkContext from pyspark import SparkConf print ("success") except ImportError as e: print ("error importing spark modules", e) sys.exit(1)
в Windows 10 для меня работало следующее. Я добавил следующие переменные среды с помощью настройки>редактировать переменные среды для вашей учетной записи:
SPARK_HOME=C:\Programming\spark-2.0.1-bin-hadoop2.7 PYTHONPATH=%SPARK_HOME%\python;%PYTHONPATH%
(перемен "\C:\Programming..."в папку, в которую вы установили spark)
для пользователей Linux ниже приведен правильный (и не жестко закодированный) способ включения PySpark libaray в PYTHONPATH. Обе части пути необходимы:
- путь к самому модулю Python pyspark и
- путь к архивированной библиотеке, на которую опирается модуль pyspark при импорте
обратите внимание, что версия библиотеки zipped определяется динамически, поэтому мы не жестко ее кодируем.
export PYTHONPATH=${SPARK_HOME}/python/:$(echo ${SPARK_HOME}/python/lib/py4j-*-src.zip):${PYTHONPATH}
Я запускаю кластер spark на CentOS VM,который устанавливается из пакетов cloudera yum.
пришлось установить следующие переменные для запуска pyspark.
export SPARK_HOME=/usr/lib/spark; export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.9-src.zip:$PYTHONPATH
export PYSPARK_PYTHON=/home/user/anaconda3/bin/python export PYSPARK_DRIVER_PYTHON=jupyter export PYSPARK_DRIVER_PYTHON_OPTS='notebook'
Это то, что я сделал для использования моего распределения Anaconda с Spark. Это независимая версия Spark. Вы можете изменить первую строку на python bin ваших пользователей. Кроме того, с Spark 2.2.0 PySpark доступен в виде автономного пакета на PyPi но мне еще предстоит это проверить.
У меня была та же проблема.
также убедитесь, что вы используете правильную версию python, и вы устанавливаете ее с правильной версией pip. в моем случае: у меня были оба python 2.7 и 3.икс. Я установил pyspark с
pip2. 7 установить pyspark
и это сработало.
Я получил эту ошибку, потому что скрипт python, который я пытался отправить, был вызван pyspark.py ( facepalm). Исправление состояло в том, чтобы установить мой PYTHONPATH, как рекомендовано выше, а затем переименовать скрипт в pyspark_test.py и почистить писпарк.pyc, который был создан на основе моего исходного имени скриптов и который очистил эту ошибку.
У меня была такая же проблема, и я бы добавил одну вещь к предложенным выше решениям. При использовании Homebrew на Mac OS X для установки Spark вам нужно будет исправить адрес пути py4j, чтобы включить libexec в путь (не забывая изменить версию py4j на ту, которая у вас есть);
PYTHONPATH=$SPARK_HOME/libexec/python/lib/py4j-0.9-src.zip:$PYTHONPATH