簡體   English   中英

在flink中使用折疊功能時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM