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
函数不应是私有的。您使用的是哪个版本?