Могу ли я добавить аргументы в код Python при отправке задания на работу?
Я пытаюсь использовать spark-submit
выполнить мой код Python в кластере искры.
Вообще бегаем spark-submit
с кодом Python, как показано ниже.
# Run a Python application on a cluster
./bin/spark-submit \
--master spark://207.184.161.138:7077 \
my_python_code.py \
1000
Но я хочу бежать my_python_code.py
Передав несколько аргументов Есть ли умный способ передать аргументы?
3 ответа
Да: поместите это в файл с именем args.py
#import sys
print sys.argv
Если вы бежите
spark-submit args.py a b c d e
Ты увидишь:
['/spark/args.py', 'a', 'b', 'c', 'd', 'e']
Четное sys.argv
является выигрышным решением, я предпочитаю этот правильный способ обработки аргументов командной строки в моих заданиях Spark:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--ngrams", help="some useful description.")
args = parser.parse_args()
if args.ngrams:
ngrams = args.ngrams
Затем запустите свою работу следующим образом:
spark-submit job.py --ngrams 3
Больше информации о argparse
модуль может быть найден в Argparse Tutorial
Вы можете передать аргументы из команды spark-submit, а затем получить к ним доступ в своем коде следующим образом:
sys.argv[1] вернет вам первый аргумент, sys.argv[2] - второй аргумент и так далее. См. Пример ниже,
Вы можете создать код, как показано ниже, чтобы принимать аргументы, которые вы будете передавать в команде spark-submit,
import os
import sys
n = int(sys.argv[1])
a = 2
tables = []
for _ in range(n):
tables.append(sys.argv[a])
a += 1
print(tables)
Сохраните указанный выше файл как PysparkArg.py и выполните следующую команду spark-submit,
spark-submit PysparkArg.py 3 table1 table2 table3
Выход:
['table1', 'table2', 'table3']
Этот фрагмент кода можно использовать в заданиях PySpark, где требуется извлечь несколько таблиц из базы данных, а количество извлекаемых таблиц и имена таблиц будут предоставлены пользователем при выполнении команды spark-submit.
Ах, это возможно. http://caen.github.io/hadoop/user-spark.html
spark-submit \
--master yarn-client \ # Run this as a Hadoop job
--queue <your_queue> \ # Run on your_queue
--num-executors 10 \ # Run with a certain number of executors, for example 10
--executor-memory 12g \ # Specify each executor's memory, for example 12GB
--executor-cores 2 \ # Specify each executor's amount of CPUs, for example 2
job.py ngrams/input ngrams/output
Аникет Кулкарни spark-submit args.py a b c d e
кажется, достаточно, но стоит упомянуть, что у нас были проблемы с необязательными / именованными аргументами (например, --param1).
Похоже, что двойные тире --
поможет сигнализировать о том, что следующие необязательные аргументы python:
spark-submit --sparkarg xxx yourscript.py -- --scriptarg 1 arg1 arg2