dask drop重复内存错误split_out



我有一个带有600个分区的大镶木dask dataframe(40 GB(,需要用dask drop_duplicates。

我注意到一个简单的drop_duplicates总是会导致1个分区,因此我包括了" split_out"。

由CSV创建了带有分区的镶木quet文件。

当我运行它时,我总是会收到内存错误工人超过95%的内存。

在监视仪表板时,我还注意到工人只会填充他们的RAM空间,以达到70%的最大值,因此我不明白为什么我会遇到内存问题。

dataframe.map_partitions(lambda d: d.drop_duplicates('index')) 

....不会起作用,因为它仅在每个分区中删除,而不是跨。

任何想法我如何计算最佳分区尺寸,因此Drop_duplicates将在我的2个工人上使用25GB RAM运行?

client = Client(n_workers=2, threads_per_worker=2, memory_limit='25000M',diagnostics_port=5001)
b=dd.read_parquet('output/geodata_bodenRaw.parq')
npart = int(b.npartitions)
print('npartitions are: ',npart)
b=b.drop_duplicates(subset='index',split_out=npart)
b=b.map_partitions(lambda d: d.set_index('index'))
b.to_parquet('output/geodata_boden.parq', write_index=True )

在监视仪表板时,我还注意到工人只会填充他们的RAM空间,以达到70%的最大值,因此我不明白为什么我会遇到内存问题。

dask开始在此级别上引起关注,并开始将数据写入磁盘。它需要保留一些免费的内存才能运行您的功能。有关如何更改以下政策的信息,请参见此处:https://distributed.dask.org/en/latest/worker.html#memory-management

通常,唯一性或删除重复项是一个并行运行的昂贵操作,尤其是对于高心电图数据集。使用split_out参数是一个好主意。在您的情况下,我会玩更多。

最新更新