1. 程式人生 > >flink流計算隨筆(7)

flink流計算隨筆(7)

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秒內☺)