AWS Glue 作业输入参数

问题描述 投票:0回答:2

我对 AWS 比较陌生,这可能是一个不太技术性的问题,但目前 AWS Glue 指出最多允许创建 25 个工作岗位。我们正在加载一系列表,每个表都有自己的工作,随后会附加审核列。每个作业都非常相似,但只是更改连接字符串源和目标。

有没有办法参数化这些作业以允许重用并简单地将正确的连接字符串传递给它们?或者甚至可能循环遍历主作业中的一组连接字符串,该主作业将调用传递不同连接字符串的子作业?

任何示例或文档将不胜感激

amazon-web-services aws-glue
2个回答
48
投票

在下面的示例中,我展示了如何在代码中使用 Glue 作业输入参数。此代码获取输入参数并将它们写入平面文件。

  1. 在作业配置中设置输入参数。

  1. 涂胶工作代码
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
 
## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
 
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
args = getResolvedOptions(sys.argv, ['JOB_NAME','VAL1','VAL2','VAL3','DEST_FOLDER'])
job.init(args['JOB_NAME'], args)

v_list=[{"VAL1":args['VAL1'],"VAL2":args['VAL2'],"VAL3":args['VAL3']}]

df=sc.parallelize(v_list).toDF()
df.repartition(1).write.mode('overwrite').format('csv').options(header=True, delimiter = ';').save("s3://"+ args['DEST_FOLDER'] +"/")

job.commit()
  1. 还可以在使用 boto3、CloudFormation 或 StepFunctions 期间提供输入参数。此示例展示了如何使用 boto3 来完成此操作。
import boto3
    
def lambda_handler(event, context):
    glue = boto3.client('glue')
        
        
    myJob = glue.create_job(Name='example_job2', Role='AWSGlueServiceDefaultRole',
                            Command={'Name': 'glueetl','ScriptLocation': 's3://aws-glue-scripts/example_job'},
                            DefaultArguments={"VAL1":"value1","VAL2":"value2","VAL3":"value3"}       
                                   )
    glue.start_job_run(JobName=myJob['Name'], Arguments={"VAL1":"value11","VAL2":"value22","VAL3":"value33"})

有用的链接:

  1. https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-pyspark-extensions-get-resolved-options.html
  2. https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-calling.html
  3. https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html#Glue.Client.create_job
  4. https://docs.aws.amazon.com/step-functions/latest/dg/connectors-glue.html

0
投票

我们可以通过在笔记本中使用适当的%%配置魔法来提供用户定义的参数/args,如下所示,您还可以检查作业详细信息>高级属性>参数中反映的参数:

%%配置 { "--input0": "s3://bucket1/", “--input1”:“s3://bucket2/” }

https://docs.aws.amazon.com/glue/latest/dg/interactive-sessions-magics.html

© www.soinside.com 2019 - 2024. All rights reserved.