《Python和HDF 5大数据应用》——2.4 你的第一个HDF5文件

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介:

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

2.4 你的第一个HDF5文件

在我们研究组和数据集之前,让我们先看一下File对象能做些什么,来作为你进入HDF5世界的起点。

这里有一个最简单的使用HDF5的程序:


screenshot

File对象是你的起点。它提供方法使你能够在文件内创建新的数据集或组,另外还有一些一目了然的属性如.filename和.mode等。

说到.mode,HDF5文件支持Python对普通文件的读写模式:


screenshot

还有一个额外的HDF5专有模式用于保护你不会意外覆盖某个已存在的文件:


screenshot

如果一个同名文件已经存在则该函数会失败,否则会创建一个新文件。如果你需要长期运行一个计算程序而且不希望当脚本第二次运行时覆盖你已有的输出文件,你可以用w-模式打开它:


screenshot

另外,你可以随意使用Unicode文件名!假设你的操作系统支持UTF-8编码,你只需提供一个普通的Unicode字符串:


screenshot

提示

你可能在想如果你的程序在打开文件时崩溃会怎样。如果你的程序抛出Python异常,别担心!HDF库会在程序退出时自动帮你关闭所有打开的文件。

2.4.1 使用环境管理器

Python 2.6的最酷特性之一是支持了环境管理器。环境管理器通过with语句使用,它们是一些具有特殊方法的对象,这些特殊方法在进入和离开代码块时被调用。下面这个经典的例子使用了Python内建的file对象:


screenshot

上面的代码打开的全新的file对象仅在f代码块中有效。当f退出时文件被自动关闭(哪怕抛出了异常!)。

h5py.File对象完全支持这种用法。这可以确保文件总是能被正确地关闭,而不需要把所有的代码包含在try/except块中:


screenshot

2.4.2 文件驱动

文件驱动处于文件系统和HDF5高级抽象(组、数据集和特征)之间。它们处理HDF5地址空间到磁盘上的字节之间的映射关系。一般情况下你无需担心当前使用了哪个驱动,因为默认的驱动适用于大部分的应用程序。

一旦文件被打开,驱动模块就完全透明了。你只需要跟HDF5库打交道,驱动会帮你处理底层存储。

下面是一些比较有意思的驱动,可以帮助你解决一些不常见的问题。
1.core驱动

core驱动会将你的文件整个保存在内存中。它对于你能够存储的数据量显然是有限制的,带来的好处则是超快速的读写。当你需要以内存级的高速来访问HDF5结构时,这是一个很好的选择。你可以将driver关键字设为“core”来开启这个驱动:


screenshot

你还可以要求HDF5在磁盘上创建一个“备份存储”文件,当内存中的文件映象被关闭时,其内容会被保存到磁盘上:


screenshot

另外,backing_store关键字同时也告诉HDF5在打开文件时从磁盘读取已存在的文件。所以只要整个文件都能被放入内存,那么你只需要对磁盘文件读写各一次。像数据集的读写、特征的创建等操作都完全不会占用磁盘I/O。
2.family驱动

有时候你会需要将一个大文件分成多个大小一致的文件,这个功能最初是为了支持那些不能处理2GB以上文件的文件系统。


screenshot

由于历史上的原因,默认的memb_size是231−1。
3.mpio驱动

这个驱动是并发HDF5的核心。它允许多个同时运行的进程访问同一个文件。你可以同时有成百上千个并发计算的进程,它们在共享访问磁盘上同一个文件时能保证数据的一致性。

使用mpio驱动需要一些技巧。第9章会详细介绍该驱动以及在并发环境下使用HDF5的最佳实践。

2.4.3 用户块

HDF5一个有意思的特性是文件内容可以被任意用户数据占用。当一个文件被打开时,HDF5库会在文件最开头搜索HDF5头部,然后是前512字节,前1024字节这样以2的指数递增。这种处于文件开头的数据被称为用户块,你可以在用户块里放任何你需要的数据。

唯一的限制是块的大小(必须是2的指数且最小512),而且当你往用户块内写入数据时,记得要先在HDF5中关闭该文件,示例如下:


screenshot

接下来我们将要看到的是NumPy用户非常熟悉的数组类型,同时也是HDF5数据模型中的第一个主要对象:数据集。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
11天前
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
1月前
|
机器学习/深度学习 存储 数据挖掘
Python图像处理实用指南:PIL库的多样化应用
本文介绍Python中PIL库在图像处理中的多样化应用,涵盖裁剪、调整大小、旋转、模糊、锐化、亮度和对比度调整、翻转、压缩及添加滤镜等操作。通过具体代码示例,展示如何轻松实现这些功能,帮助读者掌握高效图像处理技术,适用于图片美化、数据分析及机器学习等领域。
73 20
|
1天前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
22 12
|
21天前
|
监控 网络安全 开发者
Python中的Paramiko与FTP文件夹及文件检测技巧
通过使用 Paramiko 和 FTP 库,开发者可以方便地检测远程服务器上的文件和文件夹是否存在。Paramiko 提供了通过 SSH 协议进行远程文件管理的能力,而 `ftplib` 则提供了通过 FTP 协议进行文件传输和管理的功能。通过理解和应用这些工具,您可以更加高效地管理和监控远程服务器上的文件系统。
51 20
|
1月前
|
机器学习/深度学习 人工智能 分布式计算
我的阿里云社区年度总结报告:Python、人工智能与大数据领域的探索之旅
我的阿里云社区年度总结报告:Python、人工智能与大数据领域的探索之旅
117 35
|
22天前
|
人工智能 开发者 Python
Chainlit:一个开源的异步Python框架,快速构建生产级对话式 AI 应用
Chainlit 是一个开源的异步 Python 框架,帮助开发者在几分钟内构建可扩展的对话式 AI 或代理应用,支持多种工具和服务集成。
137 9
|
2月前
|
算法 数据处理 Python
高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用
Savitzky-Golay滤波器是一种基于局部多项式回归的数字滤波器,广泛应用于信号处理领域。它通过线性最小二乘法拟合低阶多项式到滑动窗口中的数据点,在降噪的同时保持信号的关键特征,如峰值和谷值。本文介绍了该滤波器的原理、实现及应用,展示了其在Python中的具体实现,并分析了不同参数对滤波效果的影响。适合需要保持信号特征的应用场景。
171 11
高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用
|
27天前
|
存储 数据采集 数据处理
如何在Python中高效地读写大型文件?
大家好,我是V哥。上一篇介绍了Python文件读写操作,今天聊聊如何高效处理大型文件。主要方法包括:逐行读取、分块读取、内存映射(mmap)、pandas分块处理CSV、numpy处理二进制文件、itertools迭代处理及linecache逐行读取。这些方法能有效节省内存,提升效率。关注威哥爱编程,学习更多Python技巧。
|
28天前
|
存储 SQL 大数据
Python 在企业级应用中的两大硬伤
关系数据库和SQL在企业级应用中面临诸多挑战,如复杂SQL难以移植、数据库负担重、应用间强耦合等。Python虽是替代选择,但在大数据运算和版本管理方面存在不足。SPL(esProc Structured Programming Language)作为开源语言,专门针对结构化数据计算,解决了Python的这些硬伤。它提供高效的大数据运算能力、并行处理、高性能文件存储格式(如btx、ctx),以及一致的版本管理,确保企业级应用的稳定性和高性能。此外,SPL与Java无缝集成,适合现代J2EE体系应用,简化开发并提升性能。
|
28天前
|
存储 JSON 对象存储
如何使用 Python 进行文件读写操作?
大家好,我是V哥。本文介绍Python中文件读写操作的方法,包括文件读取、写入、追加、二进制模式、JSON、CSV和Pandas模块的使用,以及对象序列化与反序列化。通过这些方法,你可以根据不同的文件类型和需求,灵活选择合适的方式进行操作。希望对正在学习Python的小伙伴们有所帮助。欢迎关注威哥爱编程,全栈路上我们并肩前行。

热门文章

最新文章

推荐镜像

更多