使用Dask将大于RAM的csv转换为实木复合地板

时间:2019-09-17 19:22:24

标签: python bigdata dask

我大约有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

我的方法是完全错误的还是只是缺少一个重要的细节?

1 个答案:

答案 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