python – 来自大型无序csv文件的dask set_index

冒着偏离主题的风险,我想展示一个简单的解决方案,用于在dask数据框中加载大型csv文件,其中可以应用选项sorted = True并节省大量处理时间.

我发现在dask中执行set_index的选项对于我用于学习的玩具群的大小和文件的大小(33GB)是不可行的.

因此,如果您的问题是将大量未分类的CSV文件(数十千兆字节)加载到dask数据帧中并快速开始执行groupbys,我的建议是先使用unix命令“sort”对它们进行排序.

排序处理需求可以忽略不计,并且不会将RAM限制超出无法控制的限制.您可以定义要运行/排序的并行进程数以及作为缓冲区使用的ram.到目前为止,你有磁盘空间,这是摇滚.

这里的技巧是在发出命令之前在您的环境中导出LC_ALL = C.无论哪种方式,pandas / dask sort和unix排序都会产生不同的结果.

这是我用过的代码

export LC_ALL=C

zcat BigFat.csv.gz |
fgrep -v ( have headers?? take them away)|
sort -key=1,1 -t "," ( fancy multi field sorting/index ? -key=3,3 -key=4,4)|
split -l 10000000 ( partitions ??)

结果准备好了

ddf=dd.read_csv(.....)
ddf.set_index(ddf.mykey,sorted=True)

希望这可以帮助

JC

最佳答案 如上所述,我只是将其作为我的问题的解决方案发布.希望适用于其他人.

我并不是说这是最好的,最有效的或更多的pythonic! 🙂

点赞