自定义类型的 PC 集合汇总的管道性能 - 属性的均值和中值

Pipeline Performance of Summarization of PCollections of custom types - mean and median of properties

我的 Apache-Beam/Dataflow 管道从 pub/sub 事件构建自定义类型的键控 PCollections。预汇总输出现在是 PCollection<KV<String, MyCustomObject>>。接下来我需要汇总这些数据以供报告。结构化对象的集合可能非常大,一不小心就可能出现内存不足的异常。

我在文档中看到 Combine(Combine.globally with CombineFn)和 CombineWithContext 实用程序都可用。但是,文档和代码示例仍然非常简单。

在我的管道的最后一步中 - 我需要总结这些大型 PCollection,但它们是复杂的结构化对象,我不仅要计算平均数。我还想计算一些属性的中位数。

我可以想象样本如何跨 N 个工作实例工作。例如,必须有某种 'weighted average' 由框架跨工作实例计算。但这不适用于中位数。这是 CombineWithContext 的用途吗?应该用边 input/output 的上下文来保持中值数组的状态?还是可以仅使用 Combine.globally 以其他方式实现?

任何代码示例将不胜感激。

听起来 ApproximateQuantile 变换是您所需要的,如果您可以得到近似的中位数。

还有另一个转换 here 提供了基于更高级算法的相同功能。