Nano Hash - криптовалюты, майнинг, программирование

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


Ответы:


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']
26.08.2015

2

Несмотря на то, что 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.

27.05.2016
  • Не работает! Результаты говорят [TerminalIPythonApp] CRITICAL | Неопознанный флаг: '--ngrams' 08.08.2018
  • Если у вас есть конфигурации, которые вы хотите отправить вместе с заданием Spark Submit, обязательно запустите с информацией о конфигурации сразу после Spark-Submit, например: spark-submit --master somemasterurl job.py --ngrams 3 10.08.2018
  • Не пробовал это решение, но это звучит лучше, потому что оно может удалить зависимость от последовательности аргументов. 03.06.2019
  • Кто-нибудь понял, как использовать Pyspark с argparse? Я постоянно получаю сообщение об ошибке Unrecognized flag --arg1, и это сводит меня с ума! (Искра 2.4.4 и Python 3.6) 27.04.2020

  • 3

    Вы можете передать аргументы из команды 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.

    19.09.2019

    4

    Ах, это возможно. 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
    
    26.08.2015
  • Я думаю, что вопрос не в том, как их передать, а в том, как получить доступ к аргументам после того, как они были переданы. 05.03.2019

  • 5

    spark-submit args.py a b c d e от Aniket Kulkarni кажется достаточным, но стоит упомянуть, что у нас были проблемы с необязательными/именованными аргументами (например, --param1).

    Похоже, что двойные тире -- помогут сигнализировать о том, что следуют необязательные аргументы Python:

    spark-submit --sparkarg xxx yourscript.py -- --scriptarg 1 arg1 arg2
    
    20.02.2020
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..