在几秒内处理数十亿行的DataFrame?这个Python库值得你了解一下

一切都始于NumPy。2006年,大数据这个话题逐渐引起人们关注,特别是在Hadoop问世时,Pandas DataFrames紧随其后。2014年是大数据元年,同年Apache Spark投入使用。2018年,Dask和其他用于Python数据分析的库诞生。可以看到,Python中的大数据分析正在复兴。

每个月笔者都会找到一个想学的新工具,跟上最新的技术步伐也很重要。花一两个小时看教程是值得的,从长远来看这可以节省大量时间。最近,笔者发现了一个值得了解的用于数据分析的Python库。

Vaex是一个高性能的Python库,类似于Pandas,是采用延迟out-of-core DataFrames库,可以对大型表格数据集进行可视化及探索。每秒可计算超过十亿行的基本统计数据。支持多种可视化,允许对大数据进行交互式探索。

Vaex不会复制DataFrame,可以在主内存较少的机器上处理更大的DataFrame。Vaex和Dask都使用延迟处理。唯一的区别是Vaex会在需要的时候计算字段,而Dask则需要显式地使用compute函数。数据需要采用HDF5或Apache Arrow格式才能充分利用Vaex。

创建一个包含10亿行和1000列的Pandas DataFrame,以创建一个大数据文件:

直接通过Vaex读取整个CSV,这与pandas相似,我们不会有什么发现。这个过程下来笔者的笔记本电脑需要大约85秒。

我们需要将CSV转换为HDF5(分层数据格式第五版)来看看看Vaex的好处。Vaex有一个转换函数,通过转换较小的块甚至可以支持大于主内存的文件。如果由于内存限制不能用pandas打开更大的文件,可以将其转换为HDF5并用Vaex处理。

现在,用Vaex处理7.5GB的数据集——不需要读取它,因为在上面的dv变量中已经有了它。这里只是为了测试速度。

Vaex只需要不到1秒的时间来执行上面的命令。但因为延迟加载,Vaex实际上并没有读取文件。让我们通过计算col1的和来读取它:

Vaex在过滤数据时不会创建DataFrame副本,这样可以提高内存效率。

聚合的工作原理与Pandas略有不同,但它们的速度极快。让我们计算一个二进制列,其中col1≥50。

Vaex在一个命令中包括分组和聚合。下面的命令按“col1_50”列对数据进行分组,并计算col3列的总和。

Vaex连接数据而不复制内存,这样可以保存主内存。Pandas用户将熟悉join函数:

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注