Модуль Amazon EMR Pyspark не найден
Я создал кластер Amazon EMR с уже установленным Spark. Когда я запускаю pyspark из терминала, он входит в терминал pyspark, когда я захожу в свой кластер ssh.
Я загрузил файл с помощью scp, и когда я пытаюсь запустить его с python FileName.py, я получаю ошибку импорта:
from pyspark import SparkContext
ImportError: No module named pyspark
Как это исправить?
4 ответа
Я добавляю следующие строки в ~/.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
и тебе должно быть хорошо.
Вам, вероятно, нужно добавить файлы 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
Искра дома на узле EMR должна быть что-то вроде /home/hadoop/spark
, См. https://aws.amazon.com/articles/Elastic-MapReduce/4926593393724923 для получения дополнительной информации.
Попробуйте использовать findspark: установить с помощью оболочки pip install findspark
,
Образец кода:
# Import package(s).
import findspark
findspark.init()
from pyspark import SparkContext
from pyspark.sql import SQLContext
Вы можете выполнить файл напрямую, как есть, из командной строки с помощью следующей команды:
spark-submit FileName.py