Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.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 用于通过多处理并行读取HDF5的数据集包装类_Python_Pandas_Hdf5_H5py_Pytables - Fatal编程技术网

Python 用于通过多处理并行读取HDF5的数据集包装类

Python 用于通过多处理并行读取HDF5的数据集包装类,python,pandas,hdf5,h5py,pytables,Python,Pandas,Hdf5,H5py,Pytables,我需要管理大量生理波形数据,如心电图,到目前为止,我发现HDF5在用Python进行机器学习/数据科学时兼容性最好(pandas,PyTorch,scikit learn,等等)。仅对数据集的某些行进行切片/查询/读取的能力尤其吸引人。然而,我正在努力开发一个稳定的包装器类,它允许从许多多处理工作者那里进行简单而可靠的并行读取。我可以进行单线程写入,因为我只需将源数据ETL到HDF5中一次,但缺少并行读取确实会影响数据分析、PyTorch模型运行等过程中的运行时间。我通过Pandas和h5py尝

我需要管理大量生理波形数据,如心电图,到目前为止,我发现HDF5在用Python进行机器学习/数据科学时兼容性最好(
pandas
,PyTorch,
scikit learn
,等等)。仅对数据集的某些行进行切片/查询/读取的能力尤其吸引人。然而,我正在努力开发一个稳定的包装器类,它允许从许多
多处理
工作者那里进行简单而可靠的并行读取。我可以进行单线程写入,因为我只需将源数据ETL到HDF5中一次,但缺少并行读取确实会影响数据分析、PyTorch模型运行等过程中的运行时间。我通过Pandas和
h5py
尝试了两种Pytable,具体情况如下:

  • 一个大的HDF5文件
    • 只能使单个进程读取稳定
      mp
      很快就破坏了整个文件
  • 每个时间序列间隔一个HDF5文件
    • 也就是说,数亿份文件。即使使用上下文管理器以只读方式打开文件,仍然会发生冲突,导致文件损坏。也就是说,由于IO成本高,备份或传输这么多文件的速度非常慢
很抱歉没有代码示例,但在过去几个月里,我尝试了几十种方法(每种都有数百行),最终总是遇到稳定性问题。关于如何构建由HDF5支持的dataset包装类,有什么好的示例代码吗?好吧,
h5py
基于MPI的“并行HDF5”不相关,因为它在一台机器上,并且“单写多读”不是必需的,因为我在任何读取之前都可以很好地编写单线程。理想情况下,我希望无论何时我需要项目中的数据,我都可以执行以下类似操作:

import dataset # my HDF5 dataset wrapper class
import multiprocessing as mp

def dataloader(idxs):
  temp = []
  ds = dataset.Dataset()
  for _, idx in idxs.iterrows():
    df = ds.get_data(idx)
    # do some data wrangling in parallel
    temp.append(df)
  return temp

pool = mp.Pool(6)
data = pool.map(dataloader, indices)

您试用过PyTorch的数据集包装器吗?还是你特别想写你自己的?在torch dataloader中设置num_worker是一个非常方便的多处理数据加载选项。是的,当我有一个稳定的解决方案时,这就是加载数据的方式。但这个问题更多的是关于如何存储数据,然后提供对该数据的访问。我仍然需要某种稳定的方式来允许PyTorch并行加载数据,而不会造成损坏。