首页 > 解决方案 > Dask DataFrame 是否适用于大型 Pandas DataFrame?

问题描述

我想使用 Dask 来处理大型数据帧。但是,当我尝试按如下方式使用它时出现内存错误。

df = pandas.DataFrame({'x': my_very_large_array})
ddf = dask.dataframe.from_pandas(df, npartitions=100)

我认为 Dask 应该处理比内存更大的数据。这里有什么问题?

标签: pythonpandasdask

解决方案


在您到达 Dask 之前,您的代码可能会失败。如果您有一个非常大的 Pandas 数据框,那么您已经遇到了麻烦。在这种情况下,Dask 帮不了你。

df = pandas.DataFrame({'x': my_very_large_array})      # maybe you're failing here
ddf = dask.dataframe.from_pandas(df, npartitions=100)  # rather than here

相反,人们更常见的是直接将他们的数据读入 Dask 数据帧,而不是通过 Pandas 路由。他们经常使用类似dask.dataframe.read_csvdask.dataframe.read_parquet将他们的大型数据集直接加载到 Dask 的函数。这有助于他们避免必须首先将所有数据加载到 Pandas 中,这需要他们的数据集适合内存。

有关创建 Dask 数据框的更多信息,请访问:https ://docs.dask.org/en/latest/dataframe-create.html

如果您确实在第二行遇到错误,那么我的猜测是您的内存使用量大约为 50%,并且 Dask 对数据的拆分会导致复制。在这种情况下,解决方案是相同的,不要将数据加载到 Pandas 中,然后将其移动到 Dask。如果您的数据适合内存,请使用 Pandas。如果没有,那么您可能应该找到加载它的方法,而不是一次将其全部放入内存。


推荐阅读