如何最大化 from-rest group by 的单机 Dask 性能?

Posted

技术标签:

【中文标题】如何最大化 from-rest group by 的单机 Dask 性能?【英文标题】:How to maximise single-machine Dask performance for from-rest group by? 【发布时间】:2019-08-21 06:14:33 【问题描述】:

我有一个很大的 CSV,我将它读入 Dask 并像这样执行分组

import dask.dataframe as dd
aa = dd.read_csv("large.csv")

# takes 20 seconds
aa.var0.value_counts().compute()

这需要 20 秒。

但是,如果我将数据存储为镶木地板,那么相同的操作只需要 7 秒。

aa.to_parquet("large.parquet")
aa = dd.read_parquet("large.parquet")

# takes 7 seconds
aa.var0.value_counts().compute()

我可以做些什么来进一步加快速度吗?一般问题是这样的:我有一个位于硬盘上的数据集(数据格式不受限制,但我只有一台机器,所以没有集群),如何最大化性能一个简单的 group-by 操作数据在磁盘上启动(即尚未加载到 RAM 中)?

【问题讨论】:

【参考方案1】:

我相信这并不是 dask 所特有的,而是由于 CSV 和 parquet 的格式化方式。

见Is querying against a Spark DataFrame based on CSV faster than one based on Parquet?

【讨论】:

【参考方案2】:

您可以通过仅加载一列来进一步加快速度

aa = dd.read_parquet("large.parquet", columns = ["var0"])

# takes 7 seconds
aa.var0.value_counts().compute()

可能还有更多可以做的事情,例如确保 Dask 正在使用更多的工人。

【讨论】:

对于单个大型 parquet 数据集,仅选择您需要的列将提供性能提升。其他优化将更加特定于查询。请参阅docs.dask.org/en/latest/dataframe-best-practices.html 了解更多信息。

以上是关于如何最大化 from-rest group by 的单机 Dask 性能?的主要内容,如果未能解决你的问题,请参考以下文章

mysql在group by之后如何获取每一组中id最大的那一行

如何在最小和最大日期创建 GROUP BY

如何取group by后最大值所对应的字符字段?

SQL group by 后查某字段最大值

mysql中group by max如何提取最大的一条记录

使用 group by 打印表中的最大值