如何在Flink中汇总多个字段?

时间:2017-10-17 17:40:45

标签: apache-flink flink-streaming

我想得到多个字段的总和。我用这段代码来解释我的痛苦:

 // parse the data, group it, window it, and aggregate the counts
 val windowCounts = text
      .flatMap { w => w.split("\\s") }
      .map { w => WordWithCount(w, 1, 2) }
      .keyBy("word")
      .timeWindow(Time.seconds(5), Time.seconds(1))
      .sum("count")

case class WordWithCount(word: String, count: Long, count2: Long)

我希望在我的时间窗口中显示两个字段(count和count2)的总和。 我无法添加多个这样的总和:

 val windowCounts = text
        .flatMap { w => w.split("\\s") }
        .map { w => WordWithCount(w, 1, 2) }
        .keyBy("word")
        .timeWindow(Time.seconds(5), Time.seconds(1))
        .sum("count", "count2")

我不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

DataSteam API不提供内置运算符来对多个字段求和。

有两种选择:

  1. 实施对两个字段求和的自定义ReduceFunction
  2. 查看Flink的Table APISQL support。两者都可以在组窗口上执行多个聚合。