Луиджи занимается отсутствующими задачами с множественными задачами зависимости - PullRequest
0 голосов
/ 24 января 2020

Допустим, у меня есть около 5 задач за 5 разных периодов, выводя по одному файлу Excel. Затем мне нужно будет объединить эти 5 выходных файлов в новую задачу, но одна из задач еще не выполнена, но я все же хочу, чтобы остальные эти 4 файла были объединены в один файл. Есть ли способ сделать это в Луиджи. Вот пример кода, который может помочь понять вопрос

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

1 Ответ

1 голос
/ 26 января 2020

Чтобы делать то, что вы хотите, вы ничего не можете написать в свой output. По сути, Луиджи проверяет, что задача завершена, если существуют все вещи, возвращенные методом output задачи. Таким образом, вы можете просто открывать и закрывать файлы Excel, ничего не записывая, а затем проверять, являются ли они пустыми в MergeFiles.

Кроме того, вы допустили пару ошибок в своих текущих классах.

  1. В MakeFile вы ничего не возвращаете из run. Вам нужно создать метод output и вернуть цели. См. https://luigi.readthedocs.io/en/stable/tasks.html#task -выход для получения более подробной информации.

  2. В методе requires MergeFiles вы не yield в методе require , Функция yield используется, когда вы запускаете задачу, и вам необходимо динамически требовать дополнительных задач. Если это действительно то, что вам нужно, вы можете прочитать больше здесь: https://luigi.readthedocs.io/en/stable/tasks.html#dynamic -зависимости . Я думаю, вы должны просто использовать return [MakeFile(period) for period in periods] в вашем requires. Затем вы можете получить к ним доступ, используя self.input().

...