我需要将关键值元素的无界PCollection折叠到每个键聚合中(在每个输入应用后输出聚合)。以正确的顺序折叠这些值非常重要,并且它看起来不像自定义组合器所支持的那样。每个密钥的吞吐量将非常低,但整体吞吐量将非常高。我有办法在Dataflow中执行此操作吗?
答案 0 :(得分:2)
正确,合并器是无序的。这是因为无序组合在Beam模型中很有意义,它允许后期数据(如果后期数据到达,您希望行为在您的情况下是什么?),并且因为它允许非常有效的实现,并且大多数情况下都需要它。
您可以通过自定义CombineFn来实现自定义CombineFn的一种方法:
基本上,您将使用Combine维护每个键的值的排序列表,并且您将获得CondFormatForInput <- function(Table,VectorToColor,VectorFromColor) {
cf <- condformat(Table)
input = data.frame(Val=VectorToColor,
Comp=VectorFromColor)
fills2_ = map2(input$Val,.y = input$Comp,.f = function(x,y) rule_fill_discrete_(x, expression =
iris[[y]]))
res_ = Reduce(f = "+", x = fills2_, init = cf)
res_
}
CondFormatForInput(iris,
c("Sepal.Length","Sepal.Width","Petal.Length","Petal.Width"),
c("Sepal.Width","Sepal.Width","Petal.Width","Petal.Width"))
,您可以在其中应用PCollection<KV<K, List<V>>>
倍。