概覽
Structured Streaming 是一個(gè)可拓展,容錯(cuò)的,基于Spark SQL執(zhí)行引擎的流處理引擎。使用小量的靜態(tài)數(shù)據(jù)模擬流處理。伴隨流數(shù)據(jù)的到來(lái),Spark SQL引擎會(huì)逐漸連續(xù)處理數(shù)據(jù)并且更新結(jié)果到最終的Table中。你可以在Spark SQL上引擎上使用DataSet/DataFrame API處理流數(shù)據(jù)的聚集,事件窗口,和流與批次的連接操作等。最后Structured Streaming 系統(tǒng)快速,穩(wěn)定,端到端的恰好一次保證,支持容錯(cuò)的處理。
小樣例
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()
編程模型
結(jié)構(gòu)化流的關(guān)鍵思想是將實(shí)時(shí)數(shù)據(jù)流視為一個(gè)連續(xù)附加的表
基本概念
將輸入的數(shù)據(jù)當(dāng)成一個(gè)輸入的表格,每一個(gè)數(shù)據(jù)當(dāng)成輸入表的一個(gè)新行。