调用函数时,熊猫,大数据,HDF表和内存使用情况

简短的问题

当Pandas在HDFStore上工作时(例如:.mean()或.apply()),它是否将全部数据作为DataFrame加载到内存中,还是按照记录的方式处理作为Serie?

详细描述

我必须处理大数据文件,并且可以指定数据文件的输出格式。

我打算使用熊猫来处理这些数据,并且我想设置最佳格式,以便最大限度地提高性能。

我已经看到panda.read_table()已经走了很长的路,但它仍然至少需要至少与我们想要读取的原始文件大小一样多的内存(实际上至少是内存的两倍),以转换为DataFrame 。 这可能适用于高达1 GB的文件,但高于? 这可能很难,特别是在线共享机器上。

不过,我已经看到,现在熊猫似乎使用pytables支持HDF表。

我的问题是:当我们在整个HDF表上进行操作时,Pandas如何管理内存? 例如.mean()或.apply()。 它是首先加载DataFrame中的整个表,还是直接从HDF文件处理数据而不存储在内存中?

Side-question:磁盘使用情况下的hdf5格式是否紧凑? 我的意思是,它是否像JSON一样冗长如xml或更多? (我知道有索引和东西,但我对这些数据的描述很感兴趣)


我想我已经找到了答案:是和否,这取决于你如何加载你的Pandas DataFrame。

与read_table()方法一样,您有一个“迭代器”参数,它允许获取一次只能获得一条记录的生成器对象,如下所述:http://pandas.pydata.org/pandas-docs/开发/ io.html#迭代器

现在,我不知道.mean()和.apply()这些函数如何处理这些生成器。

如果有人有更多的信息/经验,请随时分享!

关于HDF5开销:

HDF5在内存中保留一个B树,用于映射磁盘上的块结构。 分配给数据集的块越多,B-树越大。 大型B树占用内存并导致文件存储开销以及更多的磁盘I / O和更高的元数据缓存争用。 因此,在内存和I / O开销(小B树)和访问数据的时间(大B树)之间进行平衡非常重要。

http://pytables.github.com/usersguide/optimization.html

链接地址: http://www.djcxy.com/p/53535.html

上一篇: Pandas, large data, HDF tables and memory usage when calling a function

下一篇: Large, persistent DataFrame in pandas