根据我对文档的阅读,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 docs的阅读使我认为我可以继承luigi.format.Format
或继承LocalTarget
并创建自定义“ open”方法。但我找不到有关如何实现此功能的任何示例。非常感谢任何建议!
答案 0 :(得分:1)
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的扩展方式。