首页 > 解决方案 > ParDo 操作应该有多小才能获得良好的性能和光束作业的缩放?

问题描述

在数据流管道中,我想在数据流上应用多个小过滤器(ParDo 函数)。

过滤器操作不是 CPU 密集型的。对于性能和扩展,我应该在单个 ParDo 中执行所有过滤器,还是每个过滤器操作中的每个 ParDo(更清晰的代码)?

标签: apache-beam

解决方案


如果您使用的运行器支持融合,并且您在没有组合器/GBK 的情况下直接应用过滤器,那么您的代码将在单个融合步骤中执行。

来自 Beam SDK Javadocs:

优化

Beam runner 可以选择在执行之前对管道应用优化。一个关键的优化,融合,与 ParDo 操作有关。如果一个 ParDo 操作产生一个 PCollection,然后将其用作另一个 ParDo 操作的主要输入,则这两个 ParDo 操作将融合在一起成为一个 ParDo 操作并在单遍中运行;这就是“生产者与消费者的融合”。

我建议使用更简洁的代码选项并让运行程序优化执行。


推荐阅读