Scala 在flink中使用折叠函数时出错
代码如下:Scala 在flink中使用折叠函数时出错,scala,streaming,apache-flink,fold,flink-streaming,Scala,Streaming,Apache Flink,Fold,Flink Streaming,代码如下: env .addSource(…) .map(r=>(0,r)) .keyBy(0) .时间窗口(时间秒(30),时间秒(1)) .fold(mutable.HashSet[String](),(a:(Int,String),b:mutable.HashSet[String])=>a) 编译过程中出错,错误消息为: 错误:WindowedStream类中缺少方法fold的参数; 如果要将其视为部分应用的函数,请使用“\u1”遵循此方法 timeWindow(Time.seconds
env
.addSource(…)
.map(r=>(0,r))
.keyBy(0)
.时间窗口(时间秒(30),时间秒(1))
.fold(mutable.HashSet[String](),(a:(Int,String),b:mutable.HashSet[String])=>a)
编译过程中出错,错误消息为:
错误:WindowedStream类中缺少方法fold的参数;
如果要将其视为部分应用的函数,请使用“\u1”遵循此方法
timeWindow(Time.seconds(30),Time.seconds(1)).fold(mutable.HashSetString
但WindowedStream类中定义的函数是:
公共折叠(R初始值,折叠函数)
问题有两个:首先,如果您使用Scala,
FoldFunction
函数要求在第二个参数列表中传递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调用。在Flink 1.3中,WindowedStream
上的aggregate
函数不应是私有的。您使用的是哪个版本?