python – Pandas – 检索HDF5列和内存使用情况

我有一个简单的问题,我不禁感到我错过了一些明显的东西.

我已经从源表(SQL Server)读取数据并创建了一个HDF5文件来通过以下方式存储数据:

output.to_hdf(‘h5name’,’df’,format =’table’,data_columns = True,append = True,complib =’blosc’,min_itemsize = 10)

数据集约为5000万行和11列.

如果我将整个HDF5读回数据帧(通过HDFStore.select或read_hdf),它会消耗大约~24GB的RAM.如果我将特定列解析为读取语句(例如,选择2或3列),则数据帧现在仅返回这些列,但是消耗的内存量相同(24GB).

这是在带有Pandas 0.14的Python 2.7上运行的.

我错过了一些明显的东西吗

编辑:我想我回答了自己的问题.虽然我在发布之前做了很多搜索,但显然一旦发布,我发现了一个有用的链接:https://github.com/pydata/pandas/issues/6379

关于如何优化此过程的任何建议都会很好,因为内存限制我无法达到通过gc释放所需的峰值内存.

解决方法:

表格格式的HDFStore是面向行的存储.在行上选择查询索引时,但每行都会获得每列.选择列的子集会在最后执行重新索引.

有几种方法可以解决这个问题:

>使用列存储,如bcolz;这个目前还没有被PyTables实现,所以这将涉及相当多的工作
> chunk通过表,见here并结束 – 这将使用常量内存
>以固定格式存储 – 这是一种更有效的存储格式,因此将使用更少的内存(但不能追加)
>通过存储到多个子表并使用select_as_multiple创建自己的列存储,请参阅here

您选择哪些选项取决于您的数据访问的性质

注意:您可能不希望将所有列都作为data_columns,除非您真的要从all中进行选择(您只能查询数据_列或索引)
这将使存储/查询更快

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐