在 Python 中处理十亿行数据集(使用 Vaex)

使用 Vaex 在 Python 中分析十亿行数据集。了解核外处理、惰性求值和内存映射如何实现大规模快速分析。

来源:KDnuggets

简介

处理包含数十亿行的海量数据集是数据科学和分析领域的一项重大挑战。像 Pandas 这样的传统工具非常适合适合系统内存的中小型数据集,但随着数据集大小的增长,它们会变得很慢,使用大量随机存取内存 (RAM) 来运行,并且经常因内存不足 (OOM) 错误而崩溃。

这就是 Vaex 的用武之地,它是一个用于核外数据处理的高性能 Python 库。Vaex 可以让您高效且节省内存地检查、修改、可视化和分析大型表格数据集,即使在标准笔记本电脑上也是如此。

什么是 Vaex?

Vaex 是一个用于惰性、核外 DataFrame(类似于 Pandas)的 Python 库,专为大于 RAM 的数据而设计。

主要特征:

Vaex 旨在通过直接处理磁盘上的数据并仅读取所需的部分来高效处理海量数据集,从而避免将整个文件加载到内存中。

Vaex 使用惰性求值,这意味着仅在实际请求结果时才计算操作,并且它可以通过内存映射立即打开列式数据库(按列而不是按行存储数据),例如 HDF5、Apache Arrow 和 Parquet。

Vaex 基于优化的 C/C++ 后端构建,可以计算统计数据并每秒执行数十亿行操作,即使在普通硬件上也能快速进行大规模分析。

它具有类似 Pandas 的应用程序编程接口 (API),使已经熟悉 Pandas 的用户能够更顺畅地过渡,帮助他们利用大数据功能,而无需经历陡峭的学习曲线。

比较 Vaex 和 Dask

为什么传统工具举步维艰

像 Pandas 这样的工具在处理之前将整个数据集加载到 RAM 中。对于大于内存的数据集,这会导致:

  • 性能缓慢
  • 系统崩溃(OOM 错误)
  • 互动性有限
  • Vaex 永远不会将整个数据集加载到内存中;相反,它:

  • 从磁盘传输数据
  • 使用虚拟列和延迟计算来延迟计算
  • 仅在明确需要时才具体化结果
  • 升级 Vaex: