【问题标题】:Step Function - Array Input阶跃函数 - 数组输入
【发布时间】:2020-11-04 15:09:27
【问题描述】:

我正在创建一个步进函数,其中我的输入是数组形式,例如:{“ids”:[1,2,3]}。接下来,我要为这些 id 执行 2 个 Glue 作业。例如。胶水作业 1 将使用 id 1 执行,胶水作业 2 将使用 id 2 执行,然后胶水作业 1 将使用 id 3 执行,当它将处理具有 id 1 的作业时。我尝试在 Step 函数中使用并行状态,但确实如此不适用于输入块,但将完整的 ids 列表作为输入。我曾想过使用 Map 状态,但 Map 状态只需要并行执行一项任务,但就我而言,我有 2 个 Glue 作业。

解决方案可能是什么?请提出使用 Step 函数的解决方案。

【问题讨论】:

    标签: amazon-web-services aws-glue aws-step-functions


    【解决方案1】:

    如果您首先将 id2 溢出到两个数组(您的第一步),该怎么办。所以转换

    {"ids": [1, 2, 3, 4, 5]}
    

    {
      ids1:[1,3,5]
      ids2:[2,4]
    }
    

    然后添加一个包含两个并行步骤的步骤,每个包含一个映射,一个用于迭代 ids1 并将它们发送到 Glue Job1,另一个用于迭代 ids2 并将它们发送到 Glue Job2

    更新 1: 如果您不希望任何 Glue 作业更快完成并变得空闲,那么您可以保留一个列表而不是两个数组,但为每一行添加一个状态:

    {
       id:1,
       Status: null | job1 | job2
    }
    

    并且不是为每个作业映射状态,而是创建一个 while 循环,首先从列表中选择一个项目,然后调用 Glue 作业。

    所以您的Select_an_id 状态将从该列表中选择一个ID。并更改该记录的状态。您需要创建一个 Lambda 任务状态来执行此操作。

    【讨论】:

    • 我认为这不会引入真正的并行性。也许在这种情况下,Glue Job 1 处理所有作业并且现在处于空闲状态,而 Glue Job 2 仍在处理作业 id 2。作业 id 4 正在等待,而它可以通过 Glue Job 1 执行。
    • 更新了关于如何在工作之间更公平地分配工作的建议,如果您有很多项目,我仍然更喜欢更简单的解决方案。
    猜你喜欢
    • 2022-07-07
    • 2020-12-11
    • 1970-01-01
    • 2012-10-16
    • 2020-11-03
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 2015-10-27
    相关资源
    最近更新 更多