目录和文件到hdf5组和数据集

时间:2015-01-08 00:29:40

标签: hdf5

这可能是一个非常愚蠢的问题,至少是一个非常简单的问题。如果不值得详细回复,请指出正确的方向。

我的理解是HDF5可以存储分层数据。我使用文件系统来存储我的数据---根目录,子目录,数据文件(txt)和元数据文本文件。目录名称通常也是描述性的。因此,使用目录作为组和数据文件作为数据集将这些数据捆绑到hdf5文件(或文件)中似乎很自然。

我的问题是,这样做有什么好处吗?我希望能够通过使用组和/或属性(如数据库中的SELECT)来选择和组合数据集。还有,有这样的工具吗?

1 个答案:

答案 0 :(得分:1)

当然,这是可能的。

例如,我们有一个用于可视化科学数据的Web应用程序,它依赖于具有30.000个组的单个250GB HDF5文件,并且每个组包含多个数据集。组和数据集具有属性。 web-app仅访问此单个HDF5文件以检索所有信息。

使用HDF5文件的优点是,它非常便携,可以用于许多不同的语言(C ++,Java,python等)。它对于存储二进制数据也非常有效,如果将压缩和分块结合起来,您甚至可以通过使用当今的多核CPU来提高性能。

然而,HDF5与RDBMS完全不同。你不能在数据库中真正使用SELECT。您必须通过组/数据集进行迭代(可能是递归)。有一些库(PandasPyTables)构建在HDF5之上,并提供更高的抽象。缺点是你可能会失去一些便携性。

另一种方法是使用混合方法: 您可以将元信息存储在RDBMS中,将二进制数据存储在一个或多个HDF5文件中。这可能会让你最好的两个世界。

这里还列出了有用的库:

的Python:

  • h5py - 简单的pyhton hdf5包
  • PyTables - 对hdf5数据集的高级抽象(对表的支持)
  • Pandas - 数据分析库支持hdf5作为后端。

C ++:

爪哇:

  • JHI5 - 低级JNI包装器:非常灵活,但使用起来也相当繁琐。
  • Java HDF object package - 基于JHI5的高级接口。
  • JHDF5 - 在JHI5层建立高级别界面

朱莉娅:

Matlab:

R:

  • rhdf5(Bioconductor)

的GUI: