Ответ 1
Да. Поместите это в файл args.py
#import sys
print sys.argv
Если вы запустите
spark-submit args.py a b c d e
Ты увидишь:
['/spark/args.py', 'a', 'b', 'c', 'd', 'e']
Я пытаюсь использовать 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
, передав несколько аргументов. Есть ли разумный способ передать аргументы?
Да. Поместите это в файл 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
является хорошим решением, я все же предпочитаю этот более правильный способ обработки аргументов командной строки в моих заданиях PySpark:
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.
Ах, это возможно. 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 memory, for example 12GB
--executor-cores 2 \ # Specify each executor amount of CPUs, for example 2
job.py ngrams/input ngrams/output
Вы можете передать аргументы из команды 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.