使用 HDF5 数据集(不要与 HDFS 混淆)作为 luigi 中的目标

Using HDF5 datasets (not to be confused with HDFS) as targets in luigi

根据我阅读的文档,luigi 旨在将文本文件或原始二进制文件作为目标。我正在尝试在常规文件系统上使用 h5py 为使用 HDF5 文件(因为它们的许多优势)的现有处理管道构建一个 luigi 工作流。此工作流程中的某些任务不会创建全新文件,而是将新数据集添加到现有 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' 方法。但是我找不到任何关于如何实现它的例子。非常感谢任何建议!

d6tflow 具有 HDF5 pandas 实现,可以轻松扩展以保存 pandas 数据帧以外的数据。

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如何扩展。