1

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

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

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

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

4

1 回答 1

3

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

正如你所建议的,你也可以to_delayed用来做类似的事情。您需要创建多部分上传,将其与每个延迟对象一起传递给您的上传者,并在延迟的最终确定步骤中收集这些片段 - 链接是 s3fs 中执行类似操作的代码。

于 2017-09-20T19:08:50.120 回答