使用h5py在Python中对大数据进行分析工作的经验?
我做了很多统计工作,并使用Python作为我的主要语言。 我使用的一些数据集可能需要20GB的内存,这使得在numpy,scipy和PyIMSL中使用内存中的函数几乎不可能。 统计分析语言SAS在这方面具有很大的优势,它可以对硬盘数据进行操作,而不是严格按照内存处理。 但是,我想避免在SAS中编写大量代码(出于各种原因),因此我正试图确定我有哪些Python选项(除了购买更多的硬件和内存)。
我应该澄清,像map-reduce这样的方法在我的大部分工作中都没有帮助,因为我需要对整套数据进行操作(例如计算分位数或拟合逻辑回归模型)。
最近我开始玩h5py,并认为这是我发现允许Python像SAS一样操作并通过磁盘(通过hdf5文件)操作数据的最佳select,同时仍然可以利用numpy / scipy / matplotlib等。想听听有没有人在类似的环境中使用Python和h5py,以及他们发现了什么。 有没有人能够在迄今为止由SAS主导的“大数据”设置中使用Python?
编辑:购买更多的硬件/内存当然可以提供帮助,但从IT的angular度来看,我很难将Python卖给需要分析庞大数据集的组织,当Python(或R或MATLAB等)需要将数据保存在内存。 SAS在这里仍然有很强的卖点,因为虽然基于磁盘的分析可能会比较慢,但您可以自信地处理大量的数据集。 所以,我希望Stackoverflower能够帮助我找出如何减less使用Python作为主要的大数据分析语言的感知风险。
我们使用Python与h5py,numpy / scipy和boost :: python一起进行数据分析。 我们典型的数据集大小可达几百GB。
HDF5的优点:
- 可以使用h5view应用程序,h5py / ipython和h5 *命令行工具方便地检查数据
- API可用于不同的平台和语言
- 结构数据使用组
- 使用属性注释数据
- 无忧的内置数据压缩
- 单个数据集上的io速度很快
HDF5陷阱:
- 性能下降,如果一个h5文件包含太多的数据集/组(> 1000),因为遍历它们是非常缓慢的。 另一方面,io对于一些大的数据集是很快的。
- 高级数据查询(像SQL)笨拙实施和缓慢(在这种情况下考虑SQLite)
- 在所有情况下,HDF5都不是线程安全的:必须确保图书馆是用正确的选项编译的
- 改变h5数据集(resize,删除等)会导致文件大小(在最好的情况下)或者是不可能的(在最坏的情况下)(整个h5文件必须被复制以再次变平)
这是一个很长的评论,而不是你对h5py的实际问题的回答。 我不使用Python进行统计,并倾向于处理相对较小的数据集,但是可能值得花点时间查看R 的高性能计算的CRAN任务视图,尤其是“大内存和内存不足数据“部分。
三个原因:
- 你可以挖掘任何这些软件包的源代码,以获得一般可能帮助你的想法
- 你可能会发现包名称在searchPython等价物中很有用; 很多R用户也是Python用户
- 在某些情况下,使用上面链接的包之一链接到R进行特定分析可能会很方便,然后将结果绘制回Python
我再一次强调,这是我的联盟中的一切,你可能已经知道了这一切。 但是也许这对您或者同样的问题的工作人员是有用的。