将元素折叠成值

时间:2017-01-03 10:03:45

标签: google-cloud-platform google-cloud-dataflow

我需要将关键值元素的无界PCollection折叠到每个键聚合中(在每个输入应用后输出聚合)。以正确的顺序折叠这些值非常重要,并且它看起来不像自定义组合器所支持的那样。每个密钥的吞吐量将非常低,但整体吞吐量将非常高。我有办法在Dataflow中执行此操作吗?

1 个答案:

答案 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>>>倍。