GlueArgumentError: требуется аргумент --input_file_path

Я создал скрипт pyspark (задание клея) и пытаюсь запустить его через экземпляр EC2 с помощью команды cli aws Glue Start-Job-Run --arguments (здесь я передаю список аргументов). Я пробовал как сокращенный синтаксис, так и синтаксис json для передачи аргументов с помощью приведенной выше команды cli, но я получаю сообщение об ошибке "GlueArgumentError: требуется аргумент --input_file_path" (путь к входному файлу - это аргумент Я пытаюсь получить доступ к скрипту pyspark, как указано ниже)

spark = SparkSession.builder.getOrCreate()
args = getResolvedOptions(sys.argv, ['input_file_path', 'CONFIG_FILE_PATH', 'SELECTED_RECORD_FILE_PATH', 'REJECTED_RECORD_FILE_PATH']

Команды cli, которые я использовал для запуска задания, следующие:

1] aws glue start-job-run --job-name dsb_clng_and_vldtn --arguments input_file_path="s3://dsb-lfnsrn-001/lndg/data/CompanyData_UK.csv"
2] aws glue start-job-run --job-name dsb_clng_and_vldtn --arguments "file://$JSON_FILES_PATH/job_arguments_list.json"
(JSON_FILES_PATH is shell variable)

В методе 2] я использовал синтаксис json для выполнения задания. Содержимое файла json выглядит следующим образом:

{
    "input_file_path":"s3://dsb-lfnsrn-001/lndg/data/CompanyData_UK.csv",
    "CONFIG_FILE_PATH":"s3://htcdsb-dev/wrkspc/src/dsb-lfnsrn-001-config.json",
    "SELECTED_RECORD_FILE_PATH":"s3://dsb-lfnsrn-001/pckpby/processed/Valid_UK.csv",
    "REJECTED_RECORD_FILE_PATH":"s3://dsb-lfnsrn-001/pckpby/processed/Invalid_UK.csv"
}

Пожалуйста, посоветуйте мне, так как я пытаюсь решить вышеуказанную проблему в течение нескольких часов.


person Yogita Aher    schedule 28.11.2017    source источник


Ответы (5)


Несколько раздражает, что эта проблема также очевидна, когда задание Glue запускается из консоли.

Параметры задания должны указываться с префиксом «--» и упоминаться в сценарии без префикса.

введите описание изображения здесь

args = getResolvedOptions(sys.argv, ['JOB_NAME', 'table_name'])

print(args['table_name'])
person comfytoday    schedule 09.07.2018
comment
Тот факт, что параметры настраиваются из консоли через Edit Job и перед должны стоять двойной дефис, делает практически непростительным тот факт, что AWS не упомянула, что конечный пользователь должен их предоставить. Их документация по добавлению вакансий и при вызове API действительно отображается двойной дефис, но гораздо логичнее было бы вызывать его в графическом интерфейсе. - person bsplosion; 17.12.2018

getResolvedOptions ожидает, что переданные параметры будут иметь двойной дефис в вызове задания.

aws glue start-job-run --job-name dsb_clng_and_vldtn --arguments='--input_file_path="s3://dsb-lfnsrn-001/lndg/data/CompanyData_UK.csv"'

И в вашей работе:

args = getResolvedOptions(sys.argv, ['input_file_path']
person hoaxz    schedule 18.12.2017

ответ comfytoday действительно помог мне. Я хотел бы добавить, что вы также не можете использовать дефисы в именах параметров.

Например, я пробовал:

ARGUMENTS = {
    '--s3-source':   's3://cs3-bucket-here/'
    }

response = glue.start_job_run(JobName=JOB_NAME, Arguments=ARGUMENTS)

И я получил KeyErrors. Когда я заменяю «s3-source» на «s3_source» в вызове API и в скрипте Glue, он работает успешно.

person Swil    schedule 13.01.2020

Чтобы запустить несколько аргументов для задания склеивания, вы добавляете аргументы через запятую. Это сработало для меня:

aws glue start-job-run --job-name "example-my-glue-job" --arguments="--input_first_day=2013-01-01","--input_last_day=2013-01-31","--run_timestamp=20200803211121"
person Nico Arbar    schedule 04.08.2020

Еще одна вещь, о которой стоит упомянуть, это то, что несколько аргументов необходимо добавлять отдельно, как показано ниже. Также обратите внимание на спецификацию аргумента без значения.

aws glue start-job-run --job-name Ivan-Air-ETL --arguments="--job-bookmark-option=job-bookmark-enable" --arguments="--enable-metrics="
person ivan    schedule 22.01.2020