AWS Glue 作业输入参数

Posted

技术标签:

【中文标题】AWS Glue 作业输入参数【英文标题】:AWS Glue Job Input Parameters 【发布时间】:2019-02-18 08:43:35 【问题描述】:

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

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

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

【问题讨论】:

AWS Support 通常会根据要求提高其服务最大值(在本例中为 25)。你可以先试试。 @RobinL 但是有没有更有效的方法来编写我们正在尝试的代码?任何例子都会很棒 【参考方案1】:

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

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

    胶水作业代码
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()
    在使用 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")

有用的链接:

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

【讨论】:

作业参数部分在我的“编辑作业”中不可用。也许这不适用于所有工作类型? 我找到了参数。它很好地隐藏在 Job 定义中。 您好,想知道创建工作时crawler 是必需的还是可选的? @Cecilia ,不需要为 Glue 作业创建爬虫。 好的,谢谢@JariTurkia!在您的鼓励下,我能够在“操作”(页面顶部)>“编辑作业”(弹出窗口底部)>“安全配置、脚本库和作业参数(可选)”中找到隐藏的作业参数(再次弹出底部)。因此,至少您可以在不运行的情况下静态更改它们,但您仍然只能为每个作业设置一个版本的参数,这会阻止在不同的工作流或不同的环境中重用(至少通过 GUI)。

以上是关于AWS Glue 作业输入参数的主要内容,如果未能解决你的问题,请参考以下文章

如何在数据加载之前截断 AWS Glue 作业中的 RDS 表?

AWS Glue CDK - 创建作业类型 Spark (Glue 2.0)

AWS Glue ETL 作业中的 Boto3 Glue

AWS Glue 作业内存不足

AWS Glue 作业的预期运行时间

需要从 AWS GLUE 作业调用存储过程