импорт 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 88

16 ответов:

вот простой способ (Если вы не беспокоитесь о том, как это работает!!!)

использовать findspark

  1. перейдите в свою оболочку python

    pip install findspark import findspark findspark.init()

  2. импорт необходимых модулей

    from pyspark import SparkContext from pyspark import SparkConf

  3. готово!!!

если он печатает такую ошибку:

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

Не запускайте файл py как:python filename.py используйте вместо этого: spark-submit filename.py

на 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.

  1. убедитесь, что пакет pyspark может быть найден интерпретатором Python. Как уже обсуждалось, либо добавьте spark/python dir в PYTHONPATH, либо непосредственно установите pyspark с помощью pip установить.
  2. установите параметры экземпляра spark из вашего скрипта (те, которые раньше передавались в pyspark).
    • для конфигураций spark, которые вы обычно устанавливаете с помощью --conf, они определяются с помощью объекта config (или строковых конфигураций) в SparkSession.строитель.конфигурации
    • для основных параметров (например, --master или --driver-mem) на данный момент Вы можете установить их, записав в переменную среды PYSPARK_SUBMIT_ARGS. Чтобы сделать вещи чище и безопаснее, вы можете установить его из самого Python, и spark будет читать его при запуске.
  3. запустите экземпляр, который просто требует, чтобы вы позвонили 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. Обе части пути необходимы:

  1. путь к самому модулю Python pyspark и
  2. путь к архивированной библиотеке, на которую опирается модуль 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

в случае DSE (DataStax Cassandra & Spark) В PYTHONPATH необходимо добавить следующее местоположение

export PYTHONPATH=/usr/share/dse/resources/spark/python:$PYTHONPATH

затем используйте DSE pyspark, чтобы получить модули в пути.

dse pyspark