我想使用Dask来处理大型数据帧。但是,当我尝试使用它时,我得到一个内存错误,如下所示。
df = pandas.DataFrame({'x': my_very_large_array})
ddf = dask.dataframe.from_pandas(df, npartitions=100)
我认为Dask应该处理比内存数据更大的数据。这有什么不对?
在你到达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_csv
或dask.dataframe.read_parquet
这样的函数将他们的大数据集直接加载到Dask中。这有助于他们避免必须首先将所有数据加载到Pandas中,这需要他们的数据集适合内存。
有关创建Dask数据帧的更多信息,请访问:https://docs.dask.org/en/latest/dataframe-create.html
如果你确实在第二行遇到错误,那么我的猜测是你占用了大约50%的内存,并且Dask分割你的数据会导致副本。在这种情况下,解决方案是相同的,不要将数据加载到Pandas中,然后将其移动到Dask。如果您的数据适合内存,请使用Pandas。如果没有,那么你应该找到加载它的方法,而不是一次将它全部放入内存。