Я хотел бы сгенерировать большие фреймы данных в ряде процессов MPI и сохранить эти фреймы данных в подгруппах файла HDF5, где каждый ранг процесса записывает в свою подгруппу.
Вот что я пытался сделать:
import numpy as np
import pandas as pd
from mpi4py import MPI
def main():
comm = MPI.COMM_WORLD
rank = comm.rank
# 4 MPI processes for 4 number attributes.
numbers = np.arange(1,4)
# Each MPI process is responsible for its own dataframe.
numbergroup = "data/number/%d" % rank
# Create a random multidim DataFrame on each process.
iterables = [['bar', 'baz', 'foo', 'qux'], ['one', 'two']]
mindex = pd.MultiIndex.from_product(iterables, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(8, 4), index=mindex)
pdStore = pd.HDFStore("df.h5")
# Store the dataframe in a separate sub-group per process.
pdStore[numbergroup] = df
pdStore.close()
if __name__=="__main__":
main()
И выполнить его с:
mpirun -np 4 python pandas-multidim-hdf5-mpi.py
терпит неудачу так:
Проблемы с закрытием групповых данных. Закрытие остается открытым
files: df.h5 ... Ошибка в atexit._run_exitfuncs: обратная связь (самая последняя
последний вызов): файл "/usr/lib/python3.7/site-packages/tables/file.py",
строка 516, в _close_nodes
Файл node._g_close () "/usr/lib/python3.7/site-packages/tables/group.py", строка 910, в
_g_close
self._g_close_group () Файл "tables / hdf5extension.pyx", строка 1090, в tables.hdf5extension.Group._g_close_group
tables.exceptions.HDF5ExtError: Ошибка трассировки HDF5
Файл "H5G.c", строка 723, в H5Gclose
не группа
Мне известен модуль h5py , но я бы хотел легко хранить и читать многомерные кадры данных. Возможно ли это с интерфейсом панд к HDF5?