Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在luigi中使用HDF5数据集(不要与HDF混淆)作为目标_Python_H5py_Hdf_Luigi - Fatal编程技术网

Python 在luigi中使用HDF5数据集(不要与HDF混淆)作为目标

Python 在luigi中使用HDF5数据集(不要与HDF混淆)作为目标,python,h5py,hdf,luigi,Python,H5py,Hdf,Luigi,从我对文档的阅读来看,luigi设计用于以文本文件或原始二进制文件为目标。我正在尝试为现有的处理管道构建一个luigi工作流,该管道使用HDF5文件,因为在常规文件系统上使用h5py有很多优点。此工作流中的某些任务不会创建整个新文件,而是将新数据集添加到现有HDF文件中。使用h5py,我将读取具有以下内容的数据集: hdf = h5py.File('filepath','r') hdf['internal/path/to/dataset'][...] 使用以下内容编写数据集: hdf = h5

从我对文档的阅读来看,luigi设计用于以文本文件或原始二进制文件为目标。我正在尝试为现有的处理管道构建一个luigi工作流,该管道使用HDF5文件,因为在常规文件系统上使用h5py有很多优点。此工作流中的某些任务不会创建整个新文件,而是将新数据集添加到现有HDF文件中。使用h5py,我将读取具有以下内容的数据集:

hdf = h5py.File('filepath','r')
hdf['internal/path/to/dataset'][...]
使用以下内容编写数据集:

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

并测试HDF文件中的数据集是否与此行一起存在:

hdf中的“内部/path/to/dataset”

我的问题是,有没有办法让luigi适应这些类型的文件? 我对luigi文档的阅读让我觉得我可能可以将luigi.format.format子类化,或者将LocalTarget子类化,并创建一个自定义的“open”方法。但我找不到任何关于如何实现这一点的例子。非常感谢您的建议

具有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])

了解如何扩展。

h5py是HDF5文件的接口。HDFS与基于JAVA的文件系统完全不同。我在luigi文档中看到了关于HDFS的内容,但没有看到关于HDF5的内容。在其中一个数据库模块上建模如何?我还没有实现这一点,但这正是我想要的,谢谢!