Использование наборов данных HDF5 (не путать с HDFS) в качестве целей в luigi - PullRequest
0 голосов
/ 20 декабря 2018

Из моего прочтения документации, luigi предназначен для работы с текстовыми файлами или необработанными двоичными файлами в качестве целей.Я пытаюсь построить рабочий процесс luigi для существующего конвейера обработки, который использует файлы HDF5 (для их многочисленных преимуществ), используя h5py в обычной файловой системе.Некоторые задачи в этом рабочем процессе не создают совершенно новый файл, а скорее добавляют новые наборы данных в существующий файл HDF.Используя h5py, я бы прочитал набор данных с:

hdf = h5py.File('filepath','r')
hdf['internal/path/to/dataset'][...]

, записал набор данных с:

hdf['internal/path/to/dataset'] = np.array(data)

и проверил, существует ли набор данных в файле HDF с этимстрока:

'internal/path/to/dataset' in hdf

Мой вопрос: есть ли способ адаптировать luigi для работы с файлами такого типа?Мое чтение документов luigi заставляет меня думать, что я могу иметь подкласс luigi.format.Format или, возможно, подкласс LocalTarget и создать собственный метод open.Но я не могу найти примеры того, как это реализовать.Большое спасибо за любые предложения!

1 Ответ

0 голосов
/ 20 января 2019

d6tflow имеет реализацию панд HDF5 и может быть легко расширена для сохранения данных, отличных от кадров данных панд.

import d6tflow
from d6tflow.tasks.h5 import TaskH5Pandas
import pandas as pd

class Task1(TaskH5Pandas):
    def run(self):
        df = pd.DataFrame({'a':range(10)})
        self.save(df)

class Task2(d6tflow.tasks.TaskCachePandas):

    def requires(self):
        return Task1()

    def run(self):
        df = self.input().load()
        # use dataframe from HDF5

d6tflow.run([Task2])

Чтобы увидеть https://d6tflow.readthedocs.io/en/latest/targets.html#writing-your-own-targets о том, как расширить.

...