首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Vaex的性能提示

使用Vaex的性能提示
EN

Stack Overflow用户
提问于 2020-06-09 21:53:04
回答 1查看 8.6K关注 0票数 2

我正在使用Vaex和寻找性能提示。

我的用例如下:

  • I有一个大型的dataframe --让我们将其命名为large_df(只有几列,但只有数千万行,而且在生产中,数据集的大小将超过10倍)。其中一个列名为key,这是一个64个字符的字母数字字符串。此数据文件的内容存储在多个HDF5文件中。我通过在每个请求中执行vaex.open_many(<path/to/hdf5 files/).
  • On来创建数据,代码接收到少量(在10 s内)键,以便在large_df中查找。然后,我基本上必须在large_df中查找以获得其key与键的输入列表匹配的行,然后对结果匹配的df进行一些处理(这要小得多)。

从我所读到的情况来看,Vaex应该是我的用例的完美例子,但是我一直在努力获得我所期望的性能。

我的代码本质上是:

代码语言:javascript
复制
import vaex
df = vaex.open_many(</path/to/hdf5 files>)
df = df[df.key.isin(<list of input keys>)].to_pandas_df()

当提前将所有HDF5文件缓存在磁盘上时,这段代码在i3.8xlarge实例上大约需要80秒。代码在Docker容器中运行,CPU的上限为30 (可用的32个CPU)。我读过这篇关于Vaex如何很好地处理字符串的文章,乍一看,这种类型的任务Vaex应该能够轻松地并行化并在80多秒内计算。

我还尝试过将short_id列预索引到包含large_df的数据集中。基本上,这是一个整数,表示key列中的前4个字符。然后,在进行完整的字符串比较之前,我尝试对df进行预过滤。此代码如下所示:

代码语言:javascript
复制
import vaex
df = vaex.open_many(</path/to/hdf5 files>)
short_ids = [alphanumeric_string_to_int(key) for key in <input keys>]
df = df[df.short_id.isin(short_ids)]  # filter df down to a smaller size
df = df[df.key.isin(<list of input keys>)].to_pandas_df()

这大约减少了10秒,但这似乎应该让事情变得更快。我觉得我错过了一些显而易见的东西,可以让这一切变得更快。

我能做什么?请帮忙-谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-10 10:27:02

是的,这太慢了。瓦克斯‘.isin(..)在这里不聪明,所以我解决了你的问题https://github.com/vaexio/vaex/pull/822。我已经看到了275倍的字符串加速。当合并时,我将发布一个版本来解决这个问题。

致以敬意,

Maarten Breddels - vaex.io

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62292479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档