Dask 日期时间优化

Posted

技术标签:

【中文标题】Dask 日期时间优化【英文标题】:Dask datetime optimization 【发布时间】:2018-08-11 05:17:26 【问题描述】:

我想知道如何优化这种转换,我需要计算 1.25 亿行的星期几,我有一台具有 4 GB RAM 的计算机,我只是尝试这样做:

df_train['date'].dt.dayofweek.compute()

而我的装有 Ubuntu 16.04 和 Intel Core 2 Duo E7200 @ 2.5 GHz 的 PC 卡住了,我需要重新启动它

有什么办法可以优化吗?

【问题讨论】:

如果您的计算机由于内存问题而死机,您是否考虑过简单地将一周中的每一天逐行输出到文件(例如 csv 或 hdf5)?这应该有最小的内存开销。 【参考方案1】:

您的数据集大小约为 1 GB(1.25 亿行,每行 8 个字节)。愚蠢的是,dayofweek 返回一个 int64(8 个字节)。因此,在执行此计算时,将使用至少 2 GB 的内存(加上一些较小的开销)。

目前尚不清楚如何在这么小的计算机上使用这么多数据在内存中完成有意义的工作。我建议将数据分成几个块(例如 10 个),将这些块保存到磁盘,然后一次加载和操作一个块。一次 100 MB 的输入数据足以让您的处理器内核(和内存)保持忙碌。

另一个想法:如果您有很多重复的日期(您肯定必须这样做),请创建一个按唯一日期索引的系列,其值为dayofweek.astype('i1')。这将是一种更紧凑的方式来表示相同的信息(是否实用取决于您进一步处理的细节,我们不知道)。

【讨论】:

以上是关于Dask 日期时间优化的主要内容,如果未能解决你的问题,请参考以下文章

如何将Python Dask Dataframes合并到列中?

Dask:凸矩阵优化

优化 Pyspark 性能以匹配 Pandas / Dask?

使用 dask 和多处理优化内存使用

Postgres:按日期时间优化查询

Java日期时间输出格式优化