Luigi 处理具有多个依赖任务的缺失任务
Luigi dealing with missing tasks with mutiple dependency tasks
假设我在 5 个不同时期有大约 5 个任务,每个任务输出一个 excel 文件。然后我需要将这 5 个输出文件合并到一个新任务中,但其中一个任务尚未完成,但我仍然希望将这 4 个文件的其余部分合并到一个文件中。有没有办法在 Luigi 中做到这一点。
这是一些可能有助于理解问题的示例代码
class MakeFile():
period = luigi.Parameter()
def run(self):
return cleaned_file
class MergeFiles():
def requires(self):
periods = #mutiple periods
for period in periods:
yield MakeFile(period)
def run(self):
#merge files here
做你想做的事,你可以不写任何东西到你的output
。基本上,如果任务的 output
方法 return 编辑的所有内容都存在,Luigi 会检查任务是否已完成。因此,您可以只打开和关闭 excel 文件而不写入任何内容,然后测试它们在 MergeFiles
中是否为空。
除此之外,您在当前 类 中犯了几个错误。
在 MakeFile
中,您没有 return 来自 run
的任何内容。您需要创建一个 output
方法和 return 个目标。有关详细信息,请参阅 https://luigi.readthedocs.io/en/stable/tasks.html#task-output。
在MergeFiles
的requires
方法中,你没有在requires方法中yield
。 yield
函数在您 运行 执行一项任务并需要动态要求其他任务时使用。如果这确实是您所需要的,您可以在这里阅读更多内容:https://luigi.readthedocs.io/en/stable/tasks.html#dynamic-dependencies。我认为您应该在 requires
中使用 return [MakeFile(period) for period in periods]
。然后您可以使用 self.input()
.
在 运行 中访问它们
假设我在 5 个不同时期有大约 5 个任务,每个任务输出一个 excel 文件。然后我需要将这 5 个输出文件合并到一个新任务中,但其中一个任务尚未完成,但我仍然希望将这 4 个文件的其余部分合并到一个文件中。有没有办法在 Luigi 中做到这一点。 这是一些可能有助于理解问题的示例代码
class MakeFile():
period = luigi.Parameter()
def run(self):
return cleaned_file
class MergeFiles():
def requires(self):
periods = #mutiple periods
for period in periods:
yield MakeFile(period)
def run(self):
#merge files here
做你想做的事,你可以不写任何东西到你的output
。基本上,如果任务的 output
方法 return 编辑的所有内容都存在,Luigi 会检查任务是否已完成。因此,您可以只打开和关闭 excel 文件而不写入任何内容,然后测试它们在 MergeFiles
中是否为空。
除此之外,您在当前 类 中犯了几个错误。
在
MakeFile
中,您没有 return 来自run
的任何内容。您需要创建一个output
方法和 return 个目标。有关详细信息,请参阅 https://luigi.readthedocs.io/en/stable/tasks.html#task-output。在
MergeFiles
的requires
方法中,你没有在requires方法中yield
。yield
函数在您 运行 执行一项任务并需要动态要求其他任务时使用。如果这确实是您所需要的,您可以在这里阅读更多内容:https://luigi.readthedocs.io/en/stable/tasks.html#dynamic-dependencies。我认为您应该在requires
中使用return [MakeFile(period) for period in periods]
。然后您可以使用self.input()
. 在 运行 中访问它们