Dask.bag.map_partitions函数接收生成器而不是列表

时间:2018-02-07 20:51:28

标签: python dask

我正在运行一个看起来像这样的dask图:

dask.bag.from_delayed(...).pluck(FEATURE_NAME).map(map_func).map_paritions(part_func)

我在part_func的执行过程中遇到了错误,结果是收到生成器,而不是正在返回的行李物品{。}}。

这感觉就像图表优化一样,我确实找到map_func并认为它与问题有关,以及lazify_task图节点(我找不到任何文档)对于)。

虽然在reify的开头添加values = list(values)行似乎可以解决手头的问题并让我的图表继续运行,但我觉得我可能会在这里遗漏一些关于内部实现,优化和/或建立图表的方法。

1 个答案:

答案 0 :(得分:1)

是的,您的理解是正确的,dask包中的分区通常是有限的生成器而不是列表。这允许它们在更少的存储器中操作。

如果您希望始终与列表互动,那么您可以按照建议在输入上拨打list,或者在您的操作之间拨打map_partitions(list)电话。

lazify_taskreify等优化通常被视为内部优化,可随时更改。我不建议构建依赖它们的应用程序。这也是他们没有优先考虑文件的部分原因。