在flink

时间:2017-05-03 13:22:23

标签: scala streaming apache-flink fold flink-streaming

代码如下:

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函数)

1 个答案:

答案 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调用。