Python Dask一个热编码存储器错误

Python Dask一个热编码存储器错误,python,dataframe,out-of-memory,dask,Python,Dataframe,Out Of Memory,Dask,我正在尝试使用dask对分类数据进行一次热编码,并将其导出到csv 相关数据为hetrec2011-movielens-2k-v2中的“movie actors.dat”(可从网站获取)。 看起来是这样的(我只对前两列感兴趣): 原始数据可以很好地放入内存:[231742行x 2列]。 有95321个独特的Actorid和10174个电影ID,因此我将以10174行和95321列结束,这意味着它将占用大约970 MB的空间,外加一些开销 我试图编码的方式是: import dask.datafr

我正在尝试使用dask对分类数据进行一次热编码,并将其导出到csv

相关数据为hetrec2011-movielens-2k-v2中的“movie actors.dat”(可从网站获取)。 看起来是这样的(我只对前两列感兴趣):

原始数据可以很好地放入内存:[231742行x 2列]。 有95321个独特的Actorid和10174个电影ID,因此我将以10174行和95321列结束,这意味着它将占用大约970 MB的空间,外加一些开销

我试图编码的方式是:

import dask.dataframe as dd

dd.get_dummies(df.categorize()).groupby('movieID').sum()
其结果是:

     actorID_annie_potts  actorID_bill_farmer  actorID_bonnie_hunt  actorID_bradley_pierce  actorID_darryl_henriques  actorID_don_rickles
movieID                                                                  
1                          1                    1                    0                    0                         0                    1

2                          0                    0                    1                    1                         1                    0
在完整数据上运行它会占用所有可用内存(~13 GB),并导致MemoryError

重新划分

dd.get_dummies(df.categorize().repartition(npartitions=20))
使用缓存和单线程调度程序没有帮助

问题可能是在中间步骤中(在执行sum()之前),数据帧将有231742行和95321列,这将占用至少22GB的空间,这比我的交换分区要多


我怎样才能让它工作?

这么多年了,你找到解决办法了吗?我最近被困在这个问题上。坦率地说,我想我已经放弃了这个方法。如果在一台机器上执行这种操作(不确定这些方法将如何使用DASK),请考虑使用稀疏或将数据溢出到磁盘上,比如使用一个库,它透明地处理压缩,提供了一个非常接近numpy数组的API,如果你正确地分块张量,内存消耗应该是可控的。祝你好运
dd.get_dummies(df.categorize().repartition(npartitions=20))