来自大型无序 csv 文件的 dask set_index
Posted
技术标签:
【中文标题】来自大型无序 csv 文件的 dask set_index【英文标题】:dask set_index from large unordered csv file 【发布时间】:2018-04-08 20:00:25 【问题描述】:冒着离题的风险,我想展示一个简单的解决方案,用于在 dask 数据帧中加载大型 csv 文件,其中可以应用选项 sorted=True 并节省大量处理时间。
对于我用于学习的玩具集群的大小和文件的大小 (33GB),我发现在 dask 中执行 set_index 的选项不可行。
因此,如果您的问题是将大型未排序的 CSV 文件(数十 GB)加载到 dask 数据帧中并快速开始执行 groupbys,我的建议是之前使用 unix 命令“sort”对它们进行排序。
排序处理需求可以忽略不计,它不会使您的 RAM 限制超出无法管理的限制。您可以定义要运行/排序的并行进程数以及用作缓冲区的 ram。就你有磁盘空间而言,这很糟糕。
这里的技巧是在发出命令之前在您的环境中导出 LC_ALL=C。无论哪种方式,pandas/dask 排序和 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
【问题讨论】:
【参考方案1】:如上所述,我只是将其发布为我的问题的解决方案。希望对其他人有用。
我并不是说这是最好的、最有效的或更 Pythonic! :-)
【讨论】:
***.com/help/self-answer 您可以在 48 小时后将您的答案标记为已回答以上是关于来自大型无序 csv 文件的 dask set_index的主要内容,如果未能解决你的问题,请参考以下文章
为啥来自 s3 的 dask read_csv 保留了这么多内存?
pandas读取csv相对路径_你还在用Pandas处理大型数据?我发现了一个既省时又省事的工具:Dask!...