我正在使用dask.distributed实现各种数据处理管道。通常,原始数据从S3读取,最后处理(大)集合也将在S3上写入CSV。
我可以异步运行处理并监视进度,但我注意到所有将集合存储到文件的to_xxx()方法似乎都是同步调用。其中一个缺点是呼叫阻塞可能会持续很长时间。其次,我不能轻易构建一个完整的图表以便稍后执行。
有没有办法运行,例如to_csv()异步并获取未来的对象而不是阻塞?
PS:我很确定我自己可以实现异步存储,例如:通过将集合转换为delayed()并存储每个分区。但这似乎是一种常见的情况 - 除非我错过了现有的功能,否则在框架中包含这样的内容会很不错。
答案 0 :(得分:1)
大多数to_*
个函数都有compute=True
个关键字参数,可以用compute=False
替换。在这些情况下,它将返回一系列延迟值,然后您可以异步计算
values = df.to_csv('s3://...', compute=False)
futures = client.compute(values)