恢复预先计算的索引

时间:2018-08-08 05:37:17

标签: dask

我大约有。 csv文件中存储了1.5 TB的数据。 我已经用dask加载了它,并用.set_index(sorted=True)计算了索引。手术耗时9个小时。现在,我的数据框已经充满了一些合理的值。

是否可以将计算的索引存储在单独的文件中,以便下次读取这些相同的csv文件时可以可靠地恢复它?我正在使用dask 0.18.2

到目前为止,我已经尝试过存储.divisions.npartitions的值来腌制文件,然后将它们传递给.set_index方法。有趣的是,这似乎只能在计算索引的python虚拟环境中在我的PC上运行。 但是,当我在同一台PC上使用完全相同的dask版本切换到不同的python虚拟环境时,read_csv(*.csv)之后的分区数量就会明显不同,因此我无法直接使用预先计算的分区。如果我从存储的值中为该数据帧设置了分区,则按索引获取数据的结果不一致(不同)。

那么恢复csv预先计算的csv索引而不转换为镶木地板等其他存储格式的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

这是分辨率:

第一个python环境具有pstuils,第二个python环境没有。

如果缺少psutils模块,则read_csv会自动将blocksize参数设置为常数(例如256 ** 2之类的东西);如果安装了psutils python模块,则会根据虚拟内存量和cpus数量自动计算blocksize (内存// cpus / 10)。数据的分区数直接从块大小中得出。

要恢复索引,必须存储已计算出的 blocksize 并将 blocksize 参数传递给read_csv函数。

不幸的是,dask并没有真正记录这种行为,只是说,分区数是通过某种方式自动计算的。但是他们没有说,这取决于psutils模块。

这很棒,因为dask是一种开源产品,因为这样很容易发现正在发生的事情。