Модуль Amazon EMR Pyspark не найден

Я создал кластер Amazon EMR с уже установленным Spark. Когда я запускаю pyspark с терминала, он переходит в терминал pyspark, когда я использую ssh в своем кластере.

Я загрузил файл с помощью scp, и когда я пытаюсь запустить его с помощью python FileName.py, я получаю сообщение об ошибке импорта:

from pyspark import SparkContext
ImportError: No module named pyspark

Как это исправить?


person Stephen Cheng    schedule 12.08.2015    source источник


Ответы (3)


Я добавляю следующие строки в ~/.bashrc для emr 4.3:

export SPARK_HOME=/usr/lib/spark
export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.XXX-src.zip:$PYTHONPATH
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH

Здесь py4j-0.XXX-src.zip - это файл py4j в папке вашей библиотеки spark python. Выполните поиск /usr/lib/spark/python/lib/, чтобы найти точную версию, и замените XXX на этот номер версии.

Запустите source ~/.bashrc, и все будет хорошо.

person Bob Baxley    schedule 22.02.2016
comment
py4j-0.10.7-src.zip для EMR 5.16 - person Fan; 10.09.2018
comment
У меня это не сработало на ноутбуке Jupyter. Все еще получаю ModuleNotFoundError: No module named 'pyspark' - person Daniel R Carletti; 10.10.2019
comment
Это хакерский, но эффективный способ использовать удаленные ядра Spyder плюс искру в кластере EMR. - person mathisfun; 14.01.2020

Вероятно, вам нужно добавить файлы pyspark в путь. Обычно я использую следующую функцию.

def configure_spark(spark_home=None, pyspark_python=None):
    spark_home = spark_home or "/path/to/default/spark/home"
    os.environ['SPARK_HOME'] = spark_home

    # Add the PySpark directories to the Python path:
    sys.path.insert(1, os.path.join(spark_home, 'python'))
    sys.path.insert(1, os.path.join(spark_home, 'python', 'pyspark'))
    sys.path.insert(1, os.path.join(spark_home, 'python', 'build'))

    # If PySpark isn't specified, use currently running Python binary:
    pyspark_python = pyspark_python or sys.executable
    os.environ['PYSPARK_PYTHON'] = pyspark_python

Затем вы можете вызвать функцию перед импортом pyspark:

configure_spark('/path/to/spark/home')
from pyspark import SparkContext

Домой Spark на узле EMR должно быть что-то вроде /home/hadoop/spark. См. https://aws.amazon.com/articles/Elastic-MapReduce/4926593393724923 подробнее.

person santon    schedule 13.08.2015

Попробуйте использовать findspark: установка через оболочку с использованием pip install findspark.

Образец кода:

# Import package(s).
import findspark
findspark.init()

from pyspark import SparkContext
from pyspark.sql import SQLContext
person k0L1081    schedule 11.08.2018