我按照 (https://docs.dask.org/en/stable/delayed-collections.html) 的说明为 Dask DataFrame 创建自定义数据加载器,基本上是这样的:
import dask.dataframe as dd
from dask.delayed import delayed
dfs = [delayed(load)(fn) for fn in filenames]
df = dd.from_delayed(dfs, meta=types)
我有 10k 个文件名,并且我正在指定
meta
属性(类型正确)。问题是这会消耗大量内存并使工作人员暂停。如果我做同样的事情,但使用 dask 数组,它工作得很好,但如果我通过从 load()
函数返回 Pandas DataFrames 来做到这一点,它会获得如此高的内存使用量,甚至耗尽系统内存。这种方法不是应该能够很好地扩展吗?是否有其他方法在 Dask 中加载 DataFrame(按部分)?
我正在使用
dask==2023.5.0
。
回答我自己的问题:问题似乎是由
load()
函数的参数引起的,如果该参数太大而无法序列化,则会开始积累内存。