代码如下:
env
.addSource(...)
.map(r => (0, r))
.keyBy(0)
.timeWindow(Time.seconds(30), Time.seconds(1))
.fold(mutable.HashSet[String](),(a:(Int,String),b:mutable.HashSet[String])=>a)
编译期间发生错误,错误消息为:
错误:类WindowedStream中缺少方法折叠的参数; 如果要将其视为部分应用函数,请使用“_”跟随此方法 timeWindow(Time.seconds(30),Time.seconds(1))。fold(mutable.HashSetString,
但是WindowedStream类中定义的函数是:
公开折叠(R initialValue,FoldFunction函数)
答案 0 :(得分:3)
问题有两个:首先,如果你正在使用Scala,fold
函数希望FoldFunction
在第二个参数列表中传递。其次,FoldFunction
的第一个参数应该是聚合类型。因此,在您的情况下,它应该是mutable.HashSet[String]
类型。以下代码片段可以解决这个问题:
env
.addSource(...)
.map(r => (0, r))
.keyBy(0)
.timeWindow(Time.seconds(30), Time.seconds(1))
.fold(mutable.HashSet[String]()){
(a: mutable HashSet[String], b: (Int, String)) => a
}
请注意,不推荐使用Flink的fold
API调用。现在建议您使用aggregate
API调用。