《Python和HDF 5大数据应用》——1.2 HDF5到底是什么

简介:

本节书摘来自异步社区《Python和HDF 5大数据应用》一书中的第1章,第1.2节,作者[美]Andrew Collette(科莱特),胡世杰 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.2 HDF5到底是什么

HDF5是一种存储相同类型数值的大数组的机制,适用于可被层次性组织且数据集需要被元数据标记的数据模型。

它跟SQL风格的关系型数据库区别相当大,HDF5在组织结构方面有一些特殊的技巧(第8章中有一个例子)。如果你需要在多个表上保持关系,或者想要在数据上进行JOIN,那么一个关系型数据库可能更适合你。又或者你需要在一台没有安装HDF5的机器上读取一个小型的1维数据集,那么CSV这样的文本格式是更合理的选择。

但如果你需要处理多维数组,对性能有非常高的要求,需要在数据集上支持子集分片和部分I/O,需要用特征来给数据集做标记,对关系型特性没有要求,那么HDF5就是完美的选择。

那么说到底,“HDF5”究竟是指什么?我确信它包含下面3点:

1.一种文件规格及相关的数据模型;

2.一个可被C、C++、Java,Python以及其他语言使用的API标准库;

3.一个软件生态系统,由使用HDF5的客户程序以及MATLAB、IDL和Python等“分析平台”组成。

1.2.1 HDF5文件规格

你已经在上面的例子见到HDF5数据模型的三大要素:

数据集:一种数组型对象,在磁盘上保存数值类型的数据;

:层次性容器,可以包含数据集和子组;

特征:自定义元数据信息,可被附加在数据集(以及组!)上。

用户可以使用这些基本抽象构建适合自己问题域的应用格式。比如,我们之前的气象站代码为每个气象站分了一个组,为每个测量参数分配一个数据集,并附加了一些特征以描述数据集的额外信息。这种统一使用“格式内格式”来决定如何用组、数据集和特征来保存信息的方式在实验室或者其他机构中是非常普遍的。

既然HDF5处理一切如“endian”的跨平台问题,数据的分享就只需要对组、数据集和特征进行简单操作并获得结果。由于文件是自我描述的,你甚至不需要了解应用格式就可以从文件中获取数据。你只需打开文件并浏览其内容:


screenshot

任何曾经在读取“简单”二进制格式文件上花费数小时琢磨字节偏移量的人都应该对此充满感激。

最后,HDF5文件的底层字节布局是开放的规格。比起专利软件的二进制格式,这里面没有任何隐秘。虽然基本上人们都会使用HDF组织提供的库来访问这些文件,但是你自己写一个软件去读也没有任何问题。

1.2.2 HDF5标准库

HDF5文件规格及开源库由一个非营利性组织HDF组织(http://www.hdfgroup.org )维护,其总部位于伊利诺伊州尚佩恩县,原本是伊利诺伊大学香槟分校的一部分。HDF组织的主要产品是HDF5标准库。

该库主要用C语言写成,对C++和Java有一些额外的绑定。人们说起“HDF5”时通常就是指这个库。两大脍炙人口的Python接口模块PyTables和h5py使用的就是这个由HDF组织提供的C库。

这个标准库最主要的一点在于开发者对它的积极维护以及在向下兼容方面花费的巨大精力。标准库的向下兼容不仅仅是API的兼容,亦包括文件格式的兼容。对于HDF5这样的归档文件格式来说,兼容性是一个非常必需的特性。而API兼容则使h5py和PyTables这样的模块有能力处理世界上各种不同版本的HDF5。

对于科学数据的存储,包括长期的存储,你应该对HDF5有信心。由于标准库和文件格式都是开源的,哪怕一颗流星摧毁了伊利诺伊州,你的文件依然能够被读取。

1.2.3 HDF5生态系统

最后,让HDF5特别有用的一个原因是你可以在几乎任何平台上读写文件。IDL语言已经支持HDF5好多年了;MATLAB现在甚至以HDF5作为其“.mat”保存文件的默认格式;Python、C++、Java、.NET和LabView以及其他语言对其都有支持。NASA地球观测系统等机构用户使用的“EOS5”格式是建立在HDF5容器之上的应用格式,刚才我们见到的其实是其简化以后的例子。甚至作为HDF5竞争对手之一的NetCDF,其最新的NetCDF4格式也是实现在HDF5的组、数据集和特征之上。

希望我上面介绍的这些能够让你了解HDF5在科学用途上所向披靡的原因。接下来,我们将看到HDF5工作的基本原理并开始在Python上使用它。

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
5天前
|
API 数据库 数据安全/隐私保护
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
22 1
|
1天前
|
机器学习/深度学习 人工智能 算法
机械视觉:原理、应用及Python代码示例
机械视觉:原理、应用及Python代码示例
|
2天前
|
安全 前端开发 JavaScript
在Python Web开发过程中:Web框架相关,如何在Web应用中防止CSRF攻击?
在Python Web开发中防范CSRF攻击的关键措施包括:验证HTTP Referer字段、使用CSRF token、自定义HTTP头验证、利用Web框架的防护机制(如Django的`{% csrf_token %}`)、Ajax请求时添加token、设置安全会话cookie及教育用户提高安全意识。定期进行安全审计和测试以应对新威胁。组合运用这些方法能有效提升应用安全性。
7 0
|
3天前
|
缓存 人工智能 API
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
7 0
|
5天前
|
SQL 中间件 API
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】**Flask是Python的轻量级Web框架,以其简洁API和强大扩展性受欢迎。本文深入探讨了面试中关于Flask的常见问题,包括路由、Jinja2模板、数据库操作、中间件和错误处理。同时,提到了易错点,如路由冲突、模板安全、SQL注入,以及请求上下文管理。通过实例代码展示了如何创建和管理数据库、使用表单以及处理请求。掌握这些知识将有助于在面试中展现Flask技能。**
12 1
Flask框架在Python面试中的应用与实战
|
16天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
16天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
1天前
|
机器学习/深度学习 人工智能 数据可视化
Python:探索编程之美
Python:探索编程之美
9 0
|
1天前
|
机器学习/深度学习 人工智能 数据处理
Python编程的魅力与实践
Python编程的魅力与实践
|
2天前
|
SQL 关系型数据库 MySQL
第十三章 Python数据库编程
第十三章 Python数据库编程

热门文章

最新文章