AWS EMR импортирует файл из S3 - PullRequest
       5

AWS EMR импортирует файл из S3

0 голосов
/ 08 декабря 2018

Я пытаюсь понять, как импортировать файлы как библиотеки с pyspark.

Допустим, у меня есть следующее

HappyBirthday.py

def run():
    print('Happy Birthday!')

sparky.py

from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession
import HappyBirthday
sc = SparkContext(appName="kmeans")

HappyBirthday.run()
sc.stop()

И оба они хранятся в одной папке на S3.

Как убедиться, что когда яиспользовать

spark-submit --deploy-mode cluster s3://<PATH TO FILE>/sparky.py

, HappyBirthday.py также импортируется?

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Если вы пытаетесь запустить sparky.py и используете функцию внутри HappyBirthday.py, вы можете попробовать что-то вроде этого.

spark-submit \
--deploy-mode cluster --master yarn \
--py-files s3://<PATH TO FILE>/HappyBirthday.py \
s3://<PATH TO FILE>/sparky.py

Просто помните, что в s3 нет понятия «папки», поэтому вам просто нужно указать точный путь к файлам или группе файлов.

Если в вашем проекте есть целая куча зависимостей, вы можете объединить их все в один файл .zip с необходимыми init .py файлами и импортировать любые из них.функции внутри библиотек.

Например - у меня есть библиотека sqlparse в качестве зависимости, с кучей файлов Python внутри.У меня есть zip-файл пакета, как показано ниже.

unzip -l packages.zip
Archive:  packages.zip
        0  05-05-2019 12:44   sqlparse/
     2249  05-05-2019 12:44   sqlparse/__init__.py
     5916  05-05-2019 12:44   sqlparse/cli.py
...
      110  05-05-2019 12:44   sqlparse-0.3.0.dist-info/WHEEL
---------                     -------
   125034                     38 files

Это загружается на S3 и затем используется в работе.

spark-submit --deploy-mode cluster --master yarn --py-files s3://my0-test-bucket/artifacts/packages.zip s3://my-test-script/script/script.py

Мой файл может содержать импорт, как показано ниже.

import pyspark
import sqlparse # Importing the library
from pprint import pprint
0 голосов
/ 09 декабря 2018

Здесь вы хотите использовать аргумент --py-files для spark-submit.На странице отправка приложений в документации Spark:

Для Python вы можете использовать аргумент --py-files в spark-submit для добавления .py, .zip илиФайлы .egg, которые будут распространяться вместе с вашим приложением.Если вы зависите от нескольких файлов Python, мы рекомендуем упаковывать их в .zip или .egg.

Для вашего примера это будет:

spark-submit --deploy-mode cluster --py-files s3://<PATH TO FILE>/sparky.py
...