Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 阶跃函数-数组输入_Amazon Web Services_Aws Glue_Aws Step Functions - Fatal编程技术网

Amazon web services 阶跃函数-数组输入

Amazon web services 阶跃函数-数组输入,amazon-web-services,aws-glue,aws-step-functions,Amazon Web Services,Aws Glue,Aws Step Functions,我正在创建一个step函数,其中我的输入是数组形式的:{“ids”:[1,2,3]}。接下来,我要为这些ID执行两个粘合作业。例如,胶接作业1将使用id 1执行,胶接作业2将使用id 2执行,然后胶接作业1将在处理id为1的作业时使用id 3执行。我曾尝试在Step函数中使用并行状态,但这对输入块不起作用,而是将完整的ids列表作为输入。我曾想过使用映射状态,但映射状态只需要一个任务并行执行,但在我的例子中,我有两个粘合作业 这个问题的解决方案是什么?请建议使用Step函数的解决方案。如果您首先

我正在创建一个step函数,其中我的输入是数组形式的:{“ids”:[1,2,3]}。接下来,我要为这些ID执行两个粘合作业。例如,胶接作业1将使用id 1执行,胶接作业2将使用id 2执行,然后胶接作业1将在处理id为1的作业时使用id 3执行。我曾尝试在Step函数中使用并行状态,但这对输入块不起作用,而是将完整的ids列表作为输入。我曾想过使用映射状态,但映射状态只需要一个任务并行执行,但在我的例子中,我有两个粘合作业


这个问题的解决方案是什么?请建议使用Step函数的解决方案。

如果您首先将id2拆分为两个阵列(第一步),该怎么办。所以转换

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

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

更新1: 如果不希望任何粘合作业提前完成并变为空闲,则可以保留一个列表,而不是两个数组,但为每行添加一个状态:

{
   id:1,
   Status: null | job1 | job2
}
创建一个while循环,首先从列表中选择一个项目,然后调用Glue job,而不是映射每个作业的状态


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

我认为这不会引入真正的并行性。可能在这种情况下,粘合作业1处理所有作业,现在处于空闲状态,而粘合作业2仍在处理作业id 2。作业id 4正在等待,而它可以通过Glue job 1执行。更新了关于如何在作业之间更公平地分配作业的建议,如果您有许多项,我仍然更喜欢更简单的解决方案。
{
   id:1,
   Status: null | job1 | job2
}