[英]error when using fold function in flink
代碼如下:
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函數)
問題是雙重的:首先,如果你使用的是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調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.