代码之家  ›  专栏  ›  技术社区  ›  Sauron J.Vassallo

AWS胶水作业输入参数

  •  1
  • Sauron J.Vassallo  · 技术社区  · 8 年前

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

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

    任何例子或文件都将不胜感激

    1 回复  |  直到 8 年前
        1
  •  42
  •   Maurice    5 年前

    在下面的示例中,我将介绍如何在代码中使用粘合作业输入参数。这段代码获取输入参数并将其写入平面文件。

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

    enter image description here

    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或STEP功能时提供输入参数。这个例子展示了如何使用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