概覽

Structured Streaming 是一個可拓展,容錯的,基于Spark SQL執(zhí)行引擎的流處理引擎。使用小量的靜態(tài)數(shù)據(jù)模擬流處理。伴隨流數(shù)據(jù)的到來,Spark SQL引擎會逐漸連續(xù)處理數(shù)據(jù)并且更新結果到最終的Table中。你可以在Spark SQL上引擎上使用DataSet/DataFrame API處理流數(shù)據(jù)的聚集,事件窗口,和流與批次的連接操作等。最后Structured Streaming 系統(tǒng)快速,穩(wěn)定,端到端的恰好一次保證,支持容錯的處理。

小樣例

import org.apache.spark.sql.functions._import org.apache.spark.sql.SparkSession

val spark = SparkSession
  .builder
  .appName("StructuredNetworkWordCount")
  .getOrCreate()import spark.implicits._

val lines = spark.readStream
  .format("socket")
  .option("host", "localhost")
  .option("port", 9999)
  .load()// Split the lines into wordsval words = lines.as[String].flatMap(_.split(" "))// Generate running word countval wordCounts = words.groupBy("value").count()
val query = wordCounts.writeStream
  .outputMode("complete")
  .format("console")
  .start()

query.awaitTermination()

編程模型

結構化流的關鍵思想是將實時數(shù)據(jù)流視為一個連續(xù)附加的表

基本概念

將輸入的數(shù)據(jù)當成一個輸入的表格,每一個數(shù)據(jù)當成輸入表的一個新行。