首页 > 解决方案 > 当 df 为 `dd.read_parquet` 时,Dask 内存不足,但在 `from_pandas` 时工作正常……为什么?

问题描述

import pandas as pd
from dask.distributed import Client
client = Client(n_workers=4)

给定一个大约 63 毫米行的 DF,有 3 列int64和 2 列object(长度小于 10 个字符的字符串),

这个:

df1 = dd.read_parquet('..')
df1 = df1.repartition(npartitions=100)
df1.head()

...在显示以下内容后失败并KilledWorker出现错误:

distributed.nanny - WARNING - Worker exceeded 95% memory budget. Restarting
distributed.nanny - WARNING - Restarting worker
distributed.nanny - WARNING - Worker exceeded 95% memory budget. Restarting
distributed.nanny - WARNING - Restarting worker
distributed.nanny - WARNING - Worker exceeded 95% memory budget. Restarting
distributed.nanny - WARNING - Restarting worker
distributed.nanny - WARNING - Worker exceeded 95% memory budget. Restarting
distributed.nanny - WARNING - Restarting worker

但后来这个:

df2 = pd.read_parquet('..')
df2 = dd.from_pandas(df2, npartitions=100)
df2.head()

瞬间工作(我的意思head是,加载当然需要时间)。

我知道后者在将其提供给 Dask 之前已将整个 df 加载到内存中。但那有什么意义dd.read_parquet呢?我一定是做错了,刚从 Dask 开始。

更新:

标签: daskdask-dataframe

解决方案


推荐阅读