Luigi LocalTarget возвращает универсальное имя файла для записи nc-файла - PullRequest
0 голосов
/ 03 марта 2019

Я учусь использовать luigi, и я хотел бы запустить эту задачу, которую я написал, которая открывает файл, изменяет его и повторно сохраняет вывод:

class WindDirection(luigi.Task):
    uas_filepath = luigi.parameter.Parameter()

    def output(self):
        return luigi.LocalTarget("testing/wdir.nc")

    def run(self):
        # My task
        with nc.Dataset(self.uas_filepath, 'r') as uas_reader:
            wdir = NCdata.wind_dir_from_component(uas_reader)
        # Writing out the output
        wdir.write(self.output())

Задача работает нормально, но онасохраняет файл как <luigi.local_target.LocalTarget object at 0x7f86ed64ee48> в том же каталоге, что и задача, а не в папке testing с именем wdir.nc (содержимое файла такое, как должно быть).Возможно, из-за проблемы с именами, когда я повторно запускаю задачу, она создает новую копию файла вместо того, чтобы видеть, что выходной файл этой задачи уже создан.Я пробовал относительные и абсолютные пути к файлам в качестве входных данных для объекта LocalTarget.Метод .write, который я вызываю, нуждается в строковом вводе, который является путем к файлу, и мне интересно, если это вызывает проблемы.

Что мне нужно сделать, чтобы выходной файл был сохранен симя, которое я дал?

В случае, если важно, это команда, которую я использую для запуска задачи:

PYTHONPATH='.' luigi --module basic_luigi WindDirection --uas-filepath /aboslute/path/to/my/file.nc --local-scheduler

1 Ответ

0 голосов
/ 11 марта 2019

Это должно быть

class WindDirection(luigi.Task):
uas_filepath = luigi.parameter.Parameter()

def output(self):
    return luigi.LocalTarget("testing/wdir.nc")

def run(self):
    # My task
    with nc.Dataset(self.uas_filepath, 'r') as uas_reader:
        wdir = NCdata.wind_dir_from_component(uas_reader)
    # Writing out the output
    wdir.write(self.output().path)

Когда вы вызываете self.output(), он вернет luigi.LocalTarget("testing/wdir.nc"), а не путь для вывода.Если вы хотите путь, вы должны позвонить self.output().path

...