我的流处理过程基本上是这样的
Stream(Int, Boolean, Int).Keyby(0, 1).Window().process()
关键点是我想定义一个组合键,然后对其进行处理。但是,如果我使用keyby(0, 1)
和process(... Key: (Int, Boolean), ...)
,则过程中的密钥类型总是提示错误。我试图定义keyby(_._1, _._2)
,但不正确。
那么,无论如何要使用scala定义组合键,以便我可以在以下流程函数中推断诸如(Int, Boolean)
之类的键类型?
谢谢!
答案 0 :(得分:1)
问题在于KeyedStream[(Int, Boolean, Int), Tuple]
创建了一个Tuple
,其中process
是Flink的元组类。这也将是Tuple
函数的关键参数的类型。为了访问tuple.[T]getField(idx)
的字段,您需要使用T
作为字段的类型来调用ProcessWindowFunction
。
如果要将Scala元组作为KeySelector
的键,则需要定义input
.keyBy(a => (a._1, a._2))
.timeWindow(Time.days(1))
.process(new ProcessWindowFunction[(Int, Boolean, Int), Int, (Int, Boolean), TimeWindow] {
override def process(key: (Int, Boolean), context: Context, elements: Iterable[(Int, Boolean, Int)], out: Collector[Int]): Unit = {
out.collect(key._1)
}
})
。以下代码片段可以达到目的:
Math.Floor()