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

我在文档中看到可以使用Combine(Combine.globally with CombineFn)和CombineWithContext实用程序。但是,文档和代码示例仍然很少。

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

我可以想象样本如何在N个工作实例之间工作。例如,框架必须在工作人员实例之间计算某种“加权平均值”。但这不适用于中位数。这是CombineWithContext的目的吗?是否应该使用带有侧面输入/输出的上下文来保持中值数组的状态?还是可以仅使用Combine.global来通过其他方式实现?

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

最佳答案

听起来很像ApproximateQuantile变换,如果您可以接受近似中值,则是您需要的。

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

10-04 20:14