Dask DataFrame是否可与大型Pandas DataFrame一起使用?

时间:2019-03-06 15:03:42

标签: python pandas dask

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

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

我认为Dask应该处理的数据大于内存数据。怎么了?

1 个答案:

答案 0 :(得分:2)

在到达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数据框中而不是通过熊猫进行路由,这种情况更为常见。他们通常使用dask.dataframe.read_csvdask.dataframe.read_parquet之类的函数将大型数据集直接加载到Dask中。这有助于他们避免必须先将所有数据加载到Pandas中,而这将要求它们的数据集适合内存。

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

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