"我有一个流媒体流程基本上是这样的
Stream(Int, Boolean, Int).Keyby(0, 1).Window().process()
关键是我想要定义一个组合键然后处理它。但是,如果我使用keyby(0, 1)和process(... Key: (Int, Boolean), ...),进程中的键类型总是提示错误。我试图定义keyby(_._1, _._2),但不正确。
所以,无论如何使用scala定义组合键,以便我可以推断出类似于(Int, Boolean)以下过程函数的键类型?
"
"问题是,input.keyBy(0, 1).timeWindow(Time.days(1))创建一个KeyedStream[(Int, Boolean, Int), Tuple]地方Tuple是flink的元组类。这也是process函数关键参数的类型。为了访问的领域Tuple,你需要调用tuple.[T]getField(idx)与T作为字段的类型。
如果你想让Scala元组作为ProcessWindowFunction你需要定义一个的关键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)
}
})"
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。