Dask 恢复预计算索引

Dask 恢复预计算索引,dask,Dask,我有大约1.5 TB的数据存储在csv文件中。 我已经用dask加载了它,并用计算了索引。set_index(sorted=True)。手术耗时9小时。现在,我的数据帧已经用一些合理的值填充了分区 是否可以将计算出的索引存储在单独的文件中,以便下次读取这些相同的csv文件时可以可靠地恢复它?我使用的是dask 0.18.2 到目前为止,我已经尝试将.divisions和.npartitions的值存储到pickle文件中,然后将它们传递给.set\u index方法。有趣的是,这似乎只在pyth

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

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

到目前为止,我已经尝试将
.divisions
.npartitions
的值存储到pickle文件中,然后将它们传递给
.set\u index
方法。有趣的是,这似乎只在python虚拟环境中对我的PC起作用,其中索引是计算出来的。 但是,只要我在同一台PC上切换到不同的python虚拟环境,这台PC的dask版本完全相同,读取_csv(
*.csv
)后的分区数量就会显著不同,我不能直接使用预计算的分区。如果我根据存储的值设置该数据帧的分区和分区,则在按索引获取数据时会得到不一致(不同)的结果


那么,在不转换为不同的存储格式(如拼花地板)的情况下,恢复
csv
预计算的csv索引的正确方法是什么呢?

以下是解决方案:

第一个python环境有PSTUIL,第二个python环境没有PSTUIL

如果缺少psutils模块,read_csv会自动将blocksize参数设置为常量(类似256**2),如果安装了psutils python模块,则会根据虚拟内存量和CPU数量(mem//CPU/10)自动计算blocksize。数据的分区数直接来自块大小

因此,为了能够恢复索引,必须存储使用其计算的blocksize,并将blocksize参数传递给read_csv函数

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


这很好,dask是一个开源产品,因为这样很容易发现发生了什么。

这些不同的python环境是python的不同版本吗?您是否已验证索引的未勾选版本与保存时完全相同?可能数据的数据类型(32位整数与64位)与您预期的不同,或者出于某种原因使用了不同的pickle协议。只是一些想法。也值得检查每个环境中的字符编码/语言设置。但简而言之,JSON是一种比pickle更健壮、更可移植的存储格式,对于它可以处理的类型。Helllo伙计们:这里是第一个使用存储索引的环境的包:这里是不使用索引的环境的包:@djoese这些都是python3(python3.6.5)环境