Python 谷歌云数据流为管道提供内存提示

Python 谷歌云数据流为管道提供内存提示,python,google-cloud-dataflow,apache-beam,Python,Google Cloud Dataflow,Apache Beam,我的管道在CombineFn中创建大型中间数组。当我与少数工人一起运行时,管道成功了。当我增加工人数量时,由于在此步骤中工人出现OOM错误,管道将失败。我不完全确定为什么会发生这种情况,但我最好的猜测是,数据流低估了add_输入步骤所需的内存量,并创建了太多累加器 是否有某种方法可以向管道提供提示,比如说每个累加器需要X MB的内存 我以前发过关于这个问题的帖子 我现在使用的是ApacheBeam Python SDK 2.7,但问题仍然存在 我可以通过在add\u input函数中创建并立即删

我的管道在
CombineFn
中创建大型中间数组。当我与少数工人一起运行时,管道成功了。当我增加工人数量时,由于在此步骤中工人出现OOM错误,管道将失败。我不完全确定为什么会发生这种情况,但我最好的猜测是,数据流低估了add_输入步骤所需的内存量,并创建了太多累加器

是否有某种方法可以向管道提供提示,比如说每个累加器需要X MB的内存

我以前发过关于这个问题的帖子


我现在使用的是ApacheBeam Python SDK 2.7,但问题仍然存在

我可以通过在
add\u input
函数中创建并立即删除一个略大于我的中间层大小的数组来解决这个问题。在不了解谷歌内部情况的情况下,很难说为什么会这样,如果我继续增加员工数量,我可能会再次遇到同样的问题。但是,如果其他人遇到同样的问题,请尝试一下

我不知道这是否可能。不幸的是,了解幕后情况的唯一方法是支付GCP支持费用。但是数据流转换是简单的小步骤。每个150 MB的累加器都有问题。您需要以某种方式重新设计您的管道,可能将您的CombineFn拆分为多个并行运行的CombineFn,每个CombineFn只尝试计算一个统计数据。可能您在联合收割机内进行的某些迭代可以作为管道的一部分。计算每个值时使用相同的中间数组。我不认为分散工作会减少峰值内存使用。虽然现在您提到了它,但我覆盖了
add_input
,并使
add_input
调用它。只使用
add_input
效率较低,但有助于提高内存使用率。