[英]how to pass parameter to glue job using boto3 create_job programmatically
我正在使用 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
}
)
提前致谢。
您首先需要检索使用 getResolvedOptions 传递的 arguments。 像这样的东西:
import sys
from awsglue.utils import getResolvedOptions
args = getResolvedOptions(sys.argv, ['s3sourcepath'])
现在您应该可以使用args['s3sourcepath']
您可以阅读此内容以获取更多信息。
不确定是否可以在创建 Glue 作业时设置此运行时参数。 你可以在调用 start_job_run() 时尝试设置运行时参数吗? 您可以在此处参考代码示例
response = client.start_job_run(
JobName = 'my_test_Job',
Arguments = {
'--s3sourcepath': 's3 path',
} )
在您的代码中,作业命令以glue
形式给出。
Command={
'Name': 'glue',
'ScriptLocation': 's3://bucketname/gluejob.py',
'PythonVersion': '3'
},
但是这里的文档说它应该是glueetl
Command={
'Name': 'glueetl',
'ScriptLocation': 's3://bucketname/gluejob.py',
'PythonVersion': '3'
},
你能试试吗
'Name': 'glueetl'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.