apache-beam - ParDo 操作应该有多小才能获得良好的性能和光束作业的缩放?
问题描述
在数据流管道中,我想在数据流上应用多个小过滤器(ParDo 函数)。
过滤器操作不是 CPU 密集型的。对于性能和扩展,我应该在单个 ParDo 中执行所有过滤器,还是每个过滤器操作中的每个 ParDo(更清晰的代码)?
解决方案
如果您使用的运行器支持融合,并且您在没有组合器/GBK 的情况下直接应用过滤器,那么您的代码将在单个融合步骤中执行。
优化
Beam runner 可以选择在执行之前对管道应用优化。一个关键的优化,融合,与 ParDo 操作有关。如果一个 ParDo 操作产生一个 PCollection,然后将其用作另一个 ParDo 操作的主要输入,则这两个 ParDo 操作将融合在一起成为一个 ParDo 操作并在单遍中运行;这就是“生产者与消费者的融合”。
我建议使用更简洁的代码选项并让运行程序优化执行。
推荐阅读
- odoo - 如何隐藏组或组标签
- python - 通过 RTI Conector 将序列/对象发布到 ROS2 应用程序
- python - 比较来自多个数据帧的单元格
- google-cloud-platform - 单击“开始训练”时出现“请求的无效参数” i
- regex - 在vim中查找和替换第一个'>'和下一个'<'
- javascript - 将“严格模式”包装在 IIFE(自调用)表达式中是一种好习惯吗?
- node.js - SNS 发布和 Firebase 保存数据在 AWS Node.JS Lambda 中没有任何作用
- python - 为什么 Bonobo 的 CsvReader() 方法产生元组而不是字典?
- gradle - 如何在 Intellij Idea 中导入项目时执行 gradle 任务
- python - matplotlibrc 和 Latex 包设置