在Python中使用h5py处理大数据的分析工作经验?

46

我从事大量的统计工作,并使用Python作为主要语言。然而,我处理的一些数据集可能需要20GB的内存,这使得使用numpy、scipy和PyIMSL等内存函数来操作它们几乎是不可能的。统计分析语言SAS在这里有一个很大的优势,它可以处理硬盘中的数据,而不是严格的内存处理。但是,我想避免在SAS中编写大量代码(由于各种原因),因此我正在尝试确定除了购买更多的硬件和内存之外,我在Python方面有哪些选择。

我应该澄清的是,像MapReduce这样的方法在我的大部分工作中并没有太大帮助,因为我需要对完整的数据集进行操作(例如计算分位数或拟合逻辑回归模型)。

最近我开始尝试使用h5py,我认为这是我发现的让Python像SAS一样从磁盘上操作数据(通过hdf5文件),同时仍能利用numpy/scipy/matplotlib等库的最佳选择。我想听听其他人是否有类似背景的Python和h5py的经验以及他们的发现。有没有人成功地在 "大数据 "领域中使用Python,在这个领域之前由SAS主宰?

编辑:购买更多的硬件/内存当然有助于解决问题,但从IT的角度来看,当Python(或R、MATLAB等)需要在内存中保存数据时,让一个需要分析大型数据集的组织选择Python是很难的。SAS在这里仍然具有很强的卖点,因为虽然基于磁盘的分析可能会变慢,但你可以自信地处理海量的数据集。因此,我希望Stackoverflow的人们能帮助我找出如何降低使用Python作为主流大数据分析语言所带来的风险感。


3
这不完全是一个编程问题,更像是一道在线约会问题。很明显有很多人在使用H5和Python,因为h5py团队已经开发了很多年。顺便说一句,科学领域中Python的使用正在飞速增长。 - Michael Dillon
4
图书馆开发时间的长短是否真的能够反映出它在我所询问的情境中的使用情况?需要澄清的是,我已经是 Python 的拥趸,并将其用于我的商业分析工作以及一所重要大学的空气污染建模中。我询问的是一个具体的用例:使用一种内存处理语言来处理巨大数据集,而这些数据集不适合进行 MapReduce 处理,传统上由 SAS 处理数十年。 - Josh Hemann
不是开玩笑,但您是否考虑过利用具有足够内存的硬件? - eat
如果这个 https://github.com/FrancescAlted/carray 的概念开始流行起来,硬件要求可能不会太高。 - eat
1
@eat:有趣的链接。我已经阅读了Alted先生的各种演示文稿,他开发的工具非常棒。但遗憾的是,我希望尽可能保持我的标准numpy代码不变,所以我避免使用类似PyTables的东西。目前我还不清楚如何在日常工作中使用他的压缩工具。我需要加载一些数据,对其进行操作,然后压缩以腾出空间加载更多的数据,等等,需要时进行压缩/解压缩吗?这在某些情况下可能有所帮助。 - Josh Hemann
2个回答

49

我们使用Python与h5py、numpy/scipy和boost::python一起进行数据分析。我们典型的数据集大小达到数百GB。

HDF5的优点:

  • 可以使用h5view应用程序、h5py/ipython和h5*命令行工具方便地查看数据
  • API可用于不同的平台和语言
  • 使用组结构化数据
  • 使用属性注释数据
  • 无需担心内置数据压缩
  • 单个数据集的io速度快

HDF5的缺点:

  • 如果一个h5文件包含太多的数据集/组(>1000个),性能会降低,因为遍历它们非常慢。另一方面,对于几个大数据集来说,io很快。
  • 高级数据查询(类似SQL)实现麻烦且慢(在这种情况下考虑SQLite)
  • 在某些情况下,HDF5不是线程安全的:必须确保库是用正确的选项编译的
  • 更改h5数据集(调整大小、删除等)会增加文件大小(在最好的情况下)或者是不可能的(在最坏的情况下)(整个h5文件必须被复制以使其变平)

1
这是一个非常有帮助的答案。我之前不知道h5view。幸运的是,我不需要拥有深层次的文件结构。但线程安全陷阱是一个重要的问题,因为我尽可能地使用multiprocessing包或IPython中的并行扩展来加速计算。 - Josh Hemann
你能提供第一个陷阱的参考资料吗?例如,它没有列在HDF5 FAQ中。 - Brecht Machiels
性能不佳是基于我的个人经验。也许“崩溃”这个词不太恰当:遍历数千个数据集/组比遍历单个数据集中的数千个切片要慢得多。 - Bernhard Kausler

5

我不使用Python进行统计,而且通常处理相对较小的数据集,但是检查R中高性能计算的CRAN任务视图,特别是“大内存和超出内存数据”部分可能值得一试。

三个原因:

  • 您可以挖掘这些包中任何一个的源代码以获取可能有助于您的想法
  • 您可能会发现软件包名称在搜索Python等效项时很有用;许多R用户也是Python用户
  • 在某些情况下,使用上面链接的软件包之一链接到R进行特定分析可能会很方便,然后将结果绘制回Python

再次强调,这全部都超出了我的范围,您可能已经知道所有这些。但也许这对您或正在解决相同问题的人有用。


这是个好建议。我们也使用R,但更多地使用Python。然而与内存分析相关的问题相同。从你发送的链接中,ff包似乎是R中类似于我所说的h5py的分析工具。当然,商业上还有Revolution Analytics支持的XDF格式。但据我所知,它目前的功能集相当有限,主要集中在回归分析方面。 - Josh Hemann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接