HDF5-简介

HDF(Hierarchical Data Format)是一种设计用于存储和组织大量数据的文件格式,最开始由美国国家超算中心研发,后来由一个非盈利组织HDF Group支持.HDF支持多种商业及非商业的软件平台,包括MATLAB、Java、Python、R和Julia等等,现在也提供了Spark.其版本包括了HDF4和现在大量用的HDF5,.

虽然HDF Group仍然维护和支持HDF4,但是其存在以下很大的局限性:

  • 支持太多的接口格式(图像、表格、数组),导致其API过于复杂
  • 只支持科学数据集对象的元数据描述,其余的接口格式都没有
  • 32-bit的地址索引导致其存储上限只有2GB
  • 库函数过时和过于复杂,不能有效地支持并行口的I/O,很难用于线程应用中。

下面将详细介绍HDF5的特性

HDF5的整体结构如下图所示,

HDF5-简介_第1张图片

一个HDF5文件可以被看作是一个(类Unix的文件系统层次结构)包含了各类不同的数据集,数据集可以是图像、表格,甚至是PDF文件和Excel.HDF5中的两大核心就是组结构数据集

组结构

熟悉Linux系统的,可以将这个组结构类似于Linux文件系统的目录层次结构,根目录再包含其他目录,节点目录里面存放相应的数据集,或者可以将组结构当做Python里面的嵌套字典结构,通过这样一个层次化的结构可以合理地将数据组织起来.可以从下面的Python代码运行中看出来,f作为得到的HDF5的文件对象,其实就是根目录,通过新建组就可以看出来.

>>>f = h5py.File("test.hdf5")
>>>subgroup = f.create_group("subgroup")
>>>subgroup
"/subgroup" (0 members)>

数据集

HDF5数据集组织和包含原数据,以及自动和可选人工添加的关于数据描述的元数据.

下图来自HDF Group的官网,可以看出其中用于描述的元数据包括,Dataspaces、Datatypes、Properties和Attributes(可选).

HDF5-简介_第2张图片

Dataspaces

数据空间主要用于描述数据的分布情况,可以分类为无数据(NULL)、标量数据(scala)和数组,其中描述的维数(dimensions)可以是固定的,也可以是非固定的.数据空间描述的主要用途是,用于描述整个数据集的分布情况(这个应该是固定的描述),同时也用于当HDF5切片时,描述其切片的子集分布(通常来说,HDF5的切片操作类似于Numpy,但是它是在磁盘上进行操作)

Datatypes

数据类型用于描述HDF5数据集中单个数据元素的类型,在HDF5中数据类型可以被归类为:

  • 预定义数据类型
    通过HDF5创建的数据,其中又可以分为两类:

    • 标准数据类型:在所有支持的平台通用,其命名格式为架构名+编程类型名
      ,如H5T_IEEE_F32BE就是ARCH的架构,同时是标准的大端32位浮点类型.

    • 原生数据类型:通常用于简化读写的内存操作,在不同平台上不一定一样,如H5T_NATIVE_INT 就表示int(C)

  • 衍生数据类型

衍生数据类型的意思就是由预定义数据类型衍生而来,最直接的就是字符型就是预定义类型的一种,而字符串就属于衍生数据类型,即合成数据类型就是衍生数据类型,衍生数据类型还包括表格以及一些嵌套的类型.

HDF5-简介_第3张图片

Properties

特性元数据用于描述HDF5对象的特点,默认的特性描述可以通过使用 HDF5 Property List API进行修改.

HDF5-简介_第4张图片

Attributes

属性是可选的元数据,由用户人工指定,包含名称-值两个部分,注意不支持partial I/O operations,同时不能被压缩或扩展.

开发

Python里面有两个包都支持HDF5的开发,h5pyPyTables(基于HDF5并增加了数据集索引和额外的类型系统)

HDFView

HDF Group提供的用于HDF5文件打开和编辑可视化工具,基于Java开发的支持各大平台.

ODBC Connector

提供基于SQL访问HDF5文件的功能,但是貌似不是免费的,只提供了14天的试用期

HDF5 CONNECTOR FOR APACHE SPARK

现提供了通过Spark访问HDF5文件的访问器,但是是Beta版,还在开发中,可以试试当小白鼠.

后面会继续对HDF5总结更多的理解.

资料来源:
[1]. https://en.wikipedia.org/wiki/Hierarchical_Data_Format
[2]. 关于HDF文件的一点概述(HDF4,HDF5)
[3]. https://portal.hdfgroup.org/display/HDF5/Introduction+to+HDF5
[4]. 《Python和HDF5大数据应用》

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行许可。

你可能感兴趣的:(大数据技术)