імпорт pyspark в оболонці python


111

Це копія чужого запитання на іншому форумі, на яку ніколи не було відповіді, тому я подумав, що я його ще раз запитаю тут, як у мене те саме питання. (Див. 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 тощо? Якщо моя іскрова установка / іскра /, які маршрути Pyspark мені потрібно включити? Або програми pyspark можна запускати лише з інтерпретатора pyspark?


Вони кажуть, що зміна змінних оточуючих середовищ "не надто ефективна, тому що вона перекривається дуже швидко шляхом подачі бін / іскри". Можливо, ви можете навчитися чомусь із цього обміну
emmagras

Відповіді:


97

Ось простий метод (Якщо ви не турбуєтесь про те, як це працює !!!)

Використовуйте Findspark

  1. Перейдіть до своєї оболонки пітона

    pip install findspark
    
    import findspark
    findspark.init()
  2. імпортуйте необхідні модулі

    from pyspark import SparkContext
    from pyspark import SparkConf
  3. Готово !!!


Інші рішення для мене не спрацювали. Я зараз використовую Findspark у своїй програмі. Схоже, гідне вирішення проблеми.
Аналітичний чернець

Я б краще не робив цього .. але ей .. якщо нічого іншого не працює .. я візьму.
javadba

51

Якщо він друкує таку помилку:

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

9
Як описано в іншій відповіді stackoverflow.com/questions/26533169/…, мені довелося додати наступний експорт PYTHONPATH = $ SPARK_HOME / python / lib / py4j-0.8.2.1-src.zip: $ PYTHONPATH
meyerson

46

Виявляється, що скринька Pyspark - ЗАВАНТАЖЕННЯ python і автоматично завантажує правильні бібліотечні шляхи. Перевірте $ SPARK_HOME / bin / pyspark:

# Add the PySpark classes to the Python path:
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH

Я додав цей рядок до свого .bashrc-файлу, і модулі тепер правильно знайдені!


1
Окрім цього кроку, мені також потрібно було додати:, export SPARK_HOME=~/dev/spark-1.1.0перейти до фігури. Назви ваших папок можуть відрізнятися.
еммаграс

21

не запускайте файл py як: python filename.py замість цього використовуйте:spark-submit filename.py


Чи може хтось розширити питання, чому б цього не зробити? Я розглядав це питання, але поки що не зміг знайти жодного пояснення, чому це так.
Монетний двір

@Mint Інші відповіді показують, чому; пакет pyspark за замовчуванням не включений до $ PYTHONPATH, тому import pysparkпомилка в командному рядку або у виконаному скрипті не завершиться. Ви повинні або запустити Pyspark через подачу іскри за призначенням або b. додайте $ SPARK_HOME / python до $ PYTHONPATH.
королевич

Іншим моментом є іскрова подача - це сценарій оболонки, який допомагає правильно налаштувати системне середовище перед використанням іскри, якщо ви просто робите python main.py, вам потрібно правильно налаштувати системне середовище, наприклад, PYTHONPATH, SPARK_HOME
E.ZY.

21

Експортуючи шлях 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файл


1
Я не можу знайти каталог libexec в моїй Apache Sparkустановці, будь-яка ідея?
Альберто Бонсанто

@AlbertoBonsanto Вибачте. Я не стикався з цим питанням. Отож, ідеї немає :(
Dawny33

1
Так, вони вийняли папку libexec в іскрі 1.5.2
bluerubez

1
@bluerubez Здається, що він є в іскрі 1.6.2 ... Крім того, не впевнений, для чого libexec/python/buildкаталог, але іскри 1.6.2 цього не мають
OneCricketeer

17

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


14

Для іскрового виконання в pyspark потрібно працювати два компоненти:

  • pyspark пакет пітона
  • Іскровий екземпляр у JVM

Коли ви запускаєте речі з іскровою подачею або pyspark, ці сценарії подбають про обидва, тобто вони встановлять ваш PYTHONPATH, PATH тощо, щоб ваш скрипт міг знайти pyspark, а також запустити екземпляр іскри, налаштовуючи відповідно до ваших параметрів , наприклад - майстер X

Крім того, можна обійти ці сценарії та запустити іскрову програму безпосередньо в інтерфейсі python python myscript.py. Це особливо цікаво, коли сценарії іскр починають ускладнюватися і з часом отримують власні аргументи.

  1. Переконайтесь, що пакет Pyspark може знайти інтерпретатор Python. Як уже обговорювалося, або додайте іскру / пітон dir до PYTHONPATH або безпосередньо встановіть pyspark за допомогою установки pip.
  2. Встановіть параметри іскрового екземпляра зі свого сценарію (ті, які раніше передавались у pyspark).
    • Для конфігурацій іскр, які ви зазвичай встановлювали за допомогою --conf, вони визначені об'єктом config (або рядковими конфігураціями) в SparkSession.builder.config
    • Для основних параметрів (наприклад, --master або --driver-mem) на даний момент ви можете встановити їх, записавши до змінної середовища PYSPARK_SUBMIT_ARGS. Щоб зробити речі більш чистими та безпечнішими, ви можете встановити їх всередині самого Python, а іскра буде читати його під час запуску.
  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())

9

Щоб позбутися 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)

7

У Windows 10 для мене працювало наступне. Я додав такі змінні середовища, використовуючи Налаштування > Редагувати змінні середовища для вашого облікового запису :

SPARK_HOME=C:\Programming\spark-2.0.1-bin-hadoop2.7
PYTHONPATH=%SPARK_HOME%\python;%PYTHONPATH%

(змініть "C: \ програмування \ ..." у папку, в яку встановлено іскру)


5

Для користувачів Linux наступним є правильний (і не важко кодований) спосіб включення pyspark libaray в PYTHONPATH. Обидві частини PATH необхідні:

  1. Шлях до самого модуля Pyspark Python та
  2. Шлях до бібліотеки на блискавці, на яку посилається цей модуль Pyspark, коли імпортується

Зверніть увагу нижче, що версія бібліотеки-блискавки динамічно визначається, тому ми не впорядковуємо її.

export PYTHONPATH=${SPARK_HOME}/python/:$(echo ${SPARK_HOME}/python/lib/py4j-*-src.zip):${PYTHONPATH}

4

Я запускаю іскровий кластер на 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

4
export PYSPARK_PYTHON=/home/user/anaconda3/bin/python
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS='notebook'

Це те, що я зробив для використання свого дистрибутива Anaconda з Spark. Це версія Spark незалежна. Ви можете змінити перший рядок у пітонну скриньку користувачів. Крім того, що стосується Spark 2.2.0, PySpark доступний як окремий пакет для PyPi, але я ще не повинен його перевірити.


4

Ви можете отримати pyspark pathв python, використовуючи pip(якщо ви встановили pyspark за допомогою PIP), як показано нижче

pip show pyspark

3

У мене була така ж проблема.

Також переконайтеся, що ви використовуєте правильну версію python, і ви встановлюєте її з правою версією pip. у моєму випадку: у мене були і python 2.7 та 3.x. Я встановив pyspark с

pip2.7 встановити pyspark

і це спрацювало.


2

Я отримав цю помилку, оскільки скрипт python, який я намагався подати, називався pyspark.py ( facepalm ). Виправленням було встановити мій PYTHONPATH, як було рекомендовано вище, а потім перейменувати сценарій на pyspark_test.py та очистити файл pyspark.pyc, створений на основі оригінального імені мого сценарію, який усунув цю помилку.


2

У випадку DSE (DataStax Cassandra & Spark) До PYTHONPATH потрібно додати наступне місце

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

Потім використовуйте dse park, щоб отримати модулі в шляху.

dse pyspark

2

У мене була ця сама проблема і я доповнив би одне до запропонованих вище рішень. Використовуючи Homebrew на Mac OS X для встановлення Spark, вам потрібно буде виправити адресу шляху py4j, щоб включити libexec в шлях (пам'ятаючи про зміну версії py4j на ту, яку у вас є);

PYTHONPATH=$SPARK_HOME/libexec/python/lib/py4j-0.9-src.zip:$PYTHONPATH

Примітка - я спробував розпакувати його та використовувати лише py4jпапку, не вийшло. Використовуйте поштовий файл ...
El Dude,

2

У моєму випадку він отримував інсталяцію в іншому python dist_package (python 3.5), тоді як я використовував python 3.6, тому нижче допомогло:

python -m pip install pyspark

1

Ви також можете створити контейнер Docker з Alpine як ОС та встановити Python та Pyspark як пакети. Це матиме все це в контейнерах.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.