Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何在时间窗口内获取最新值_Scala_Apache Flink - Fatal编程技术网

Scala 如何在时间窗口内获取最新值

Scala 如何在时间窗口内获取最新值,scala,apache-flink,Scala,Apache Flink,这就是我的流式数据的外观: time | id | group ---- | ---| --- 1 | a1 | b1 2 | a1 | b2 3 | a1 | b3 4 | a2 | b3 在我们的窗口内考虑以上所有示例。我的用例获得最新的独特id 我需要输出如下所示: time | id | group ---- | ---| --- 3 | a1 | b3 4 | a2 | b3 我怎样才能在弗林克做到这一点 我知道窗口功能WindowFunctio

这就是我的流式数据的外观:

time | id | group
---- | ---| ---
1    | a1 | b1
2    | a1 | b2
3    | a1 | b3
4    | a2 | b3
在我们的窗口内考虑以上所有示例。我的用例获得最新的独特id

我需要输出如下所示:

time | id | group
---- | ---| ---
3    | a1 | b3
4    | a2 | b3
我怎样才能在弗林克做到这一点

我知道窗口功能
WindowFunction
。然而,我不能这样做

我试着这样做只是为了得到不同的ID。如何将此函数扩展到我的用例

class DistinctGrid extends WindowFunction[UserMessage, String, Tuple, TimeWindow] {
  override def apply(key: Tuple, window: TimeWindow, input: Iterable[UserMessage], out: Collector[String]): Unit = {
    val distinctGeo = input.map(_.id).toSet
    for (i <- distinctGeo) {
      out.collect(i)
    }
  }
}
class DistinctGrid扩展了WindowFunction[用户消息、字符串、元组、时间窗口]{
覆盖def apply(键:元组,窗口:时间窗口,输入:Iterable[UserMessage],out:Collector[String]):单位={
val distinctGeo=input.map(u.id).toSet

对于(i如果您通过id字段为流设置键,那么就不需要考虑不同的id——每个不同的键都有一个单独的窗口。您的窗口函数只需要迭代窗口内容,以找到具有最大时间戳的UserMessage,并将其作为窗口的结果输出(对于该键).但是,有一个内置函数可以做到这一点--请看for maxBy()--因此在本例中不需要窗口函数

粗略地说,这看起来像

stream.keyBy("id")
  .timeWindow(Time.minutes(10))
  .maxBy("time")
  .print()