【问题标题】:how to pass parameter to glue job using boto3 create_job programmatically如何以编程方式使用boto3 create_job将参数传递给粘合作业
【发布时间】:2022-10-03 10:40:26
【问题描述】:

使用 boto3 创建作业脚本创建粘合作业并尝试将默认参数值传递到路径位置以运行不同的 s3 存储桶文件。

下面的脚本是示例代码,它将创建胶水 ETL 作业。如何使用 args 将参数传递给 sourcepath。

示例脚本:

import boto3
import json
client = boto3.client('glue')
response = client.create_job(
   Name='jobname',
   Description='Glue Job',
   LogUri='s3://bucket/logs/',
   Role='arn:aws:iam::',
   ExecutionProperty={
       'MaxConcurrentRuns': 3
   },
   Command={
       'Name': 'glue',
       'ScriptLocation': 's3://bucketname/gluejob.py',
       'PythonVersion': '3'
   },
   MaxRetries = 1,
   Timeout=123,
   GlueVersion='3.0',
   NumberOfWorkers=2,
   WorkerType='G.1X',
   DefaultArguments = {'s3sourcepath':'s3://bucketname/csvfile.csv'}
   CodeGenConfigurationNodes = {
   'node-1':{
       'S3CsvSource': {
               'Name': 's3_source',
               'Paths': [
                   args['s3sourcepath'], ------ here how to pass default arguments 
               ],
               'Separator': 'comma',
               'QuoteChar': 'quote',
               'WithHeader': True,
               'WriteHeader': True
           }
)

提前致谢。

【问题讨论】:

  • 场景 1:使用 boto3 创建作业。 (这里的问题是参数/参数无法在“路径”中定义。场景 2:使用默认 getresolvedoption 创建的胶水作业。胶水作业脚本不包含参数/参数。胶水脚本中的预期结果 getResolvedOptions(args,["JOB_NAME"," s3sourcepath"])。

标签: python boto3 aws-glue


【解决方案1】:

您首先需要检索使用 getResolvedOptions 传递的参数。像这样的东西:

import sys
from awsglue.utils import getResolvedOptions

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

现在你应该可以使用 args['s3sourcepath']

您可以阅读this 了解更多信息。

【讨论】:

  • 谢谢您的答复。我不想编辑和添加。如果我手动添加 args = getResolvedoptions (sys.argv, ["JOB_NAME","s3sourcepath"]) 则胶水 etl 作业将运行,我们可以在使用参数运行但不编辑胶水作业时传递不同的位置,我如何从create_job 脚本。
【解决方案2】:

不确定是否可以在创建 Glue 作业时设置此运行时参数。你可以在调用 start_job_run() 时尝试设置运行时参数吗?您可以参考此处here 获取代码示例

response = client.start_job_run(
           JobName = 'my_test_Job',
           Arguments = {
             '--s3sourcepath':   's3 path',
              } )

【讨论】:

  • 嗨,谢谢你。胶水 etl 作业中没有设置参数,因此即使我们传入 start_job 运行也将不起作用。
【解决方案3】:

在您的代码中,作业命令为glue。 但是文档here 说它应该是glueetl 你可以试试glueetl

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-24
    • 2023-04-07
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    相关资源
    最近更新 更多