flink流計算隨筆(7)
阿新 • • 發佈:2018-12-13
Flink中的DataStream程式是在資料流上實現轉換的常規程式(例如,過濾、更新狀態、定義視窗、聚合)。資料流最初是從各種來源(例如,訊息佇列、套接字流、檔案)建立的。結果通過sink返回,它可以將資料寫入檔案或寫入標準輸出(例如命令列終端)。Flink程式在各種上下文中執行,獨立執行,或嵌入到其他程式中。執行可以在本地JVM中執行,也可以在許多機器的叢集中執行。 下面的程式是一個完整的流視窗單詞計數應用程式的工作示例,它在5秒的視窗中對來自web套接字的單詞進行計數。您可以複製並貼上程式碼在本地執行它。
import org.apache.flink.streaming.api.scala._ import org.apache.flink.streaming.api.windowing.time.Time object WindowWordCount { def main(args: Array[String]) { val env = StreamExecutionEnvironment.getExecutionEnvironment val text = env.socketTextStream("localhost", 9999) val counts = text.flatMap { _.toLowerCase.split("\\W+") filter { _.nonEmpty } } .map { (_, 1) } .keyBy(0) .timeWindow(Time.seconds(5)) .sum(1) counts.print() env.execute("Window Stream WordCount") } }
要執行示例程式,首先從終端啟動netcat的輸入流: 只需鍵入一些單詞,然後按下回車鍵就可以得到一個新詞。這些將是單詞計數程式的輸入。如果你想看到數大於1,輸入相同的單詞一遍又一遍地在5秒(如果你不能快速敲鍵盤,增加視窗大小的5秒內☺)