2017-07-18 57 views
1

我有超过1B记录的Parquet文件。 我试图运行与下面的语句groupbyDask groupby MemoryError:

dfg = df[['col1','col2','col3']].groupby(['col1','col2']]).count().compute() 

我用下面的配置的client运行。
client = distributed.Client(set_as_default=True)

我得到一个MemoryError:

我应该用不同的客户端配置运行?

我与核心独立的工作站上运行:24,内存:123 GB

BTW - 最后我需要保存count回到原来的df作为新列。

有什么建议吗?我应该在数据库中运行groupby而不是Dask

回答

0

您正在进行的操作,groupby(...).count()应该在少量空间中完成。

我看到的唯一可能是你的分区可能非常大,所以一次有24个分区存在问题?

对不起,我不能在这里更有帮助。

+0

所以我应该用较小的分区重新创建镶木地板?如果是这样 - 可以选择'dask'('partition_on'参数不相关)。 “client.distribution”的配置可以帮助吗? –

+0

我不知道这是你的问题。这只是一个盲目的猜测。 – MRocklin

+0

仅供参考 - 在24核和123 GB内存的单机上,我们无法在Dask中执行25亿条记录中的group by,我们不得不迁移到SQL SERVER。顺便说一下机器有192GB的内存,但'dask集群'不能识别所有的内存。 –