【发布时间】:2020-10-16 11:39:54
【问题描述】:
我是 Dask 的新手,我发现它非常有用,但我有一个问题我还没有解决。
我有一个大于内存的数据集,我想从列中删除重复值。
问题在于,删除后数据集仍将大于内存。因此,需要通过文件计算结果,直接保存到磁盘中。
当然,我可以构建一个代码来手动执行此删除操作,但我想知道 Dask 是否已经实现了此功能。
这是我的代码:
from dask.distributed import Client
import dask.dataframe as dd
client = Client(memory_limit='8GB') # I've tried without this limit
data = dd.read_csv("path_to_file", dtype={
'id': 'Int64'
}, sample=1000)
data.drop_duplicates(subset=['text'])
results = data.compute() # <- Here is the problem
results.to_csv("pathout", index=False)
当我调用计算时,结果是一个 DataFrame pandas,在这种情况下,它比内存大。我收到了很多:
distributed.nanny - WARNING - Worker exceeded 95% memory budget. Restarting
distributed.nanny - WARNING - Restarting worker
然后执行失败并显示“KilledWorker”
编辑:
自包含示例:
import numpy as np
import pandas as pd
from dask.distributed import Client
import dask.dataframe as dd
# Creates about 2Gb of data
data = np.random.randint(0, 10000, size=(2000000,200))
pd.DataFrame(data).to_csv('test_in.csv', index=False)
# If you want to run on terminal, uncomment the next line and identy the rest of the code
# if __name__ == '__main__':
# To test, limit dask to 1Gb
client = Client(n_workers=1, memory_limit='1GB')
df = dd.read_csv('test_in.csv', blocksize='16MB')
results = df.drop_duplicates()
results.to_csv('test_out.csv', index=False)
client.close()
【问题讨论】:
-
您使用的是
Jupyter lab/notebook还是Google Colab?因为在Google Colab中,您可以免费获得大约 12 GB 的 RAM,所以可能会在"KilledWorker"时执行不会失败