我正在运行一个看起来像这样的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)
行似乎可以解决手头的问题并让我的图表继续运行,但我觉得我可能会在这里遗漏一些关于内部实现,优化和/或建立图表的方法。
答案 0 :(得分:1)
是的,您的理解是正确的,dask包中的分区通常是有限的生成器而不是列表。这允许它们在更少的存储器中操作。
如果您希望始终与列表互动,那么您可以按照建议在输入上拨打list
,或者在您的操作之间拨打map_partitions(list)
电话。
lazify_task
和reify
等优化通常被视为内部优化,可随时更改。我不建议构建依赖它们的应用程序。这也是他们没有优先考虑文件的部分原因。