我大约有60,000个大小从1MB到几百MB不等的小型CSV文件,我想将其转换为一个Parquet文件。所有CSV的总大小约为1.3 TB。这比我正在使用的服务器的内存大(可用的678 GB)。
由于所有CSV都有相同的字段,因此我将它们串联到一个大文件中。我试图用Dask处理此文件:
ddf = dd.read_csv("large.csv", blocksize="1G").to_parquet("large.pqt")
我的理解是,当作业分配给多个工作人员时,blocksize选项将防止dask耗尽内存。
发生的事情是,最终Dask确实耗尽了内存,并且我收到一堆消息,例如:
distributed.nanny - WARNING - Restarting worker
我的方法是完全错误的还是只是缺少一个重要的细节?
答案 0 :(得分:0)
您不必将所有文件串联为一个大文件。 dd.read_csv
很高兴接受文件名列表或其中包含"*"
的字符串。
如果CSV文件中有文本数据,则将其加载到pandas或dask数据帧中会大大增加使用的内存量,因此1GB的块可能比您预期的要大得多。如果您使用较小的块大小,事情是否可行?您可能要查询以下文档条目:https://docs.dask.org/en/latest/best-practices.html#avoid-very-large-partitions
通常,我建议使用Dask的仪表板来查看计算,并查看占用了您的内存的内容。这可能会帮助您找到一个好的解决方案。 https://docs.dask.org/en/latest/diagnostics-distributed.html