如何在AWS Glue作业脚本中获取GlueJobOperator的script_args参数
问题描述
我有一个使用GlueJobOperator模块触发AWS Glue作业的Airflow DAG,目前运行正常。现在我尝试通过GlueJobOperator的script_args参数传递输入参数,代码如下:
script_arguments = { "start_date": "2024-01-31", "end_date": "2024-02-02" } glue_job_task = GlueJobOperator( task_id="trigger_glue_job", job_name="attribution_dag_test", iam_role_name="AWSGlueServiceRole", s3_bucket="aws-glue-assets-191965435652-us-east-1", script_args=script_arguments )
我认为应该可以在Glue作业脚本中访问这些参数,尝试用getResolvedOptions获取:
args = getResolvedOptions(sys.argv, ["JOB_NAME", "start_date", "end_date"])
但没有成功,请问如何访问这些script_args参数?
解决方案
问题出在Airflow的GlueJobOperator传递script_args时,参数名需要以--作为前缀,而Glue脚本中使用getResolvedOptions时不需要带前缀。
修改Airflow DAG中的参数定义
将script_arguments的键名加上--前缀:
script_arguments = { "--start_date": "2024-01-31", "--end_date": "2024-02-02" } glue_job_task = GlueJobOperator( task_id="trigger_glue_job", job_name="attribution_dag_test", iam_role_name="AWSGlueServiceRole", s3_bucket="aws-glue-assets-191965435652-us-east-1", script_args=script_arguments )
Glue脚本中保持原有写法不变
继续使用不带前缀的参数名获取:
import sys from awsglue.utils import getResolvedOptions args = getResolvedOptions(sys.argv, ["JOB_NAME", "start_date", "end_date"]) # 访问参数示例 start_date = args["start_date"] end_date = args["end_date"]
原理说明
Glue作业的命令行参数要求以--开头,Airflow的GlueJobOperator会直接将script_args中的键值对作为命令行参数传递给Glue作业。如果没有加--前缀,Glue无法识别这些自定义参数,因此无法通过getResolvedOptions获取到。
内容的提问来源于stack exchange,提问作者Matt J
相关产品推荐
相关产品推荐

