将大型dask数据帧写入单个S3 CSV文件

时间:2017-09-20 17:26:22

标签: dask dask-distributed

我正在使用dask.distributed群集并且我想将大型数据帧保存到单个CSV文件到S3,如果可能的话保持分区的顺序(默认情况下to_csv()写入数据帧到多个文件,每个分区一个)。此外,此文件存储操作也应作为延迟/延迟任务执行(应在集群工作程序上执行)。

我能想到的第一个解决方案是将分区存储在临时S3位置,然后在延迟功能中使用S3分段上传来合并/上传这些文件。临时存储在这里是一个缺点。

可以使用dataframe.to_delayed()完成吗?上传需要由单个延迟功能执行(S3没有追加操作),同时数据帧可能大于工作人员的内存,因此该功能不能简单地依赖于所有数据帧分区。

PS。 CSV格式是此用例的要求。

1 个答案:

答案 0 :(得分:1)

您当然可以使用df.map_partitions写入多个文件,然后使用s3fs merge方法创建单个最终文件(记住除了第一个文件之外的所有文件)不应该写标题行。)

您也可以使用to_delayed来做类似的事情,如您所说。您需要create多部分上传,将每个延迟对象与上传者一起传递,并在延迟finalize步骤中收集片段 - 链接到s3fs中的代码,类似于