Могу ли я добавить аргументы в код 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
Другие вопросы по тегам