7

我创建了一个 pyspark 脚本(胶水作业)并尝试使用 cli 命令 aws glue start-job-run --arguments 通过 EC2 实例运行(这里我正在传递参数列表)。我已经尝试使用简写语法和 json 语法来使用上述 cli 命令传递参数,但我收到错误“GlueArgumentError: argument --input_file_path is required”(输入文件路径是我试图在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"
}

请给我建议,因为我在几个小时内都在努力解决上述问题。

4

5 回答 5

10

当从控制台运行 Glue 作业时,这个问题也很明显。

作业参数必须使用“--”前缀指定,并且在脚本中引用时不带前缀。

在此处输入图像描述

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

print(args['table_name'])
于 2018-07-09T02:22:01.507 回答
8

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']
于 2017-12-18T21:02:45.067 回答
3

comfytoday 的回答真的帮助了我。我想补充一点,您也不能在参数名称中使用连字符。

例如,我试过:

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

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

我收到了 KeyErrors。当我在 API 调用和 Glue 脚本中将 's3-source' 替换为 's3_source' 时,它成功运行。

于 2020-01-13T22:32:19.417 回答
3

要为粘合作业运行多个参数,请添加用逗号分隔的参数。这对我有用:

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"
于 2020-08-04T16:24:27.993 回答
0

另一件值得一提的是,需要单独添加多个参数,如下所示。还要注意没有值的参数的规范。

aws glue start-job-run --job-name Ivan-Air-ETL --arguments="--job-bookmark-option=job-bookmark-enable" --arguments="--enable-metrics="
于 2020-01-22T07:44:38.570 回答