我大约有。 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索引而不转换为镶木地板等其他存储格式的正确方法是什么?
答案 0 :(得分:0)
这是分辨率:
第一个python环境具有pstuils,第二个python环境没有。
如果缺少psutils模块,则read_csv会自动将blocksize参数设置为常数(例如256 ** 2之类的东西);如果安装了psutils python模块,则会根据虚拟内存量和cpus数量自动计算blocksize (内存// cpus / 10)。数据的分区数直接从块大小中得出。
要恢复索引,必须存储已计算出的 blocksize 并将 blocksize 参数传递给read_csv函数。
不幸的是,dask并没有真正记录这种行为,只是说,分区数是通过某种方式自动计算的。但是他们没有说,这取决于psutils模块。
这很棒,因为dask是一种开源产品,因为这样很容易发现正在发生的事情。