如何最大化 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 性能?的主要内容,如果未能解决你的问题,请参考以下文章