0
点赞
收藏
分享

微信扫一扫

spark大数据分析:spark Struct Strreaming(20)结构化流认知

宁静的猫 2022-01-31 阅读 59



文章目录


  • ​​优点​​
  • ​​案例​​
  • ​​编程模型​​
  • ​​输出模式​​


优点

struct Streaming构建在spark SQL之上,将数据以增量的方式连续的读物到DataFrame,DataSet中,并可以像使用静态的DataFrame.DataSet分析数据,同时支持基于事件时间的窗口操作聚合数据,通过CheckPoint以及WALs(预写日志.)机制实现消费数据"有且只有一次"

Struct Strreaming也是将数据按时间间隔整理多个批次处理,并且可以将时间处理间隔降低到100ms,精确去除重复数据

案例

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.streaming.Trigger


object StructStream01 {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder().master("local[*]").appName("StructStream01").getOrCreate()
import spark.implicits._
spark.sparkContext.setLogLevel("WARN")
/**
* readStream 生成DataStreamReader来从数据源读取数据
* format 指定数据读取方式
* option 配置选项
* load 生成streaming DataFrame
*/
val lines = spark.readStream.format("socket").option("host", "note01").option("port", 9999).load()
val counts = lines.as[String].flatMap(_.split(" ")).groupBy("value").count()

/**
* outputMode: 指定数据输出方式,complete为全量输出
* Trigger: 触发器,处理间隔
* format: 输出位置
* start: 启动程序
*/
counts.writeStream.outputMode("complete").trigger(Trigger.ProcessingTime(3000))
.format("console").start().awaitTermination()

}
}

编程模型

在Struct Strreaming中,抽象为Input Table 流表,整个 查询计划都以输入表为起点,按照时间间隔持续生成Trigger(触发器),每一个Trigger处理一个批次数据,每一个批次中每一条数据对应表中内容,处理数据被追加到结果表汇总,根据开发者设置的输出模式输出外部系统

输出模式

Complete Mode:全量模式


每一个批次的数据处理完毕后,将结果表中数据全部输出到外部系统,该模式下处理数据必须存在聚合操作


AppendMode : 追加模式


每一个批次数据处理后果表新增的行输出至外部系统,如果结果表已有数据发生更新不会输出,该模式下设置Watermark才能对数据进行聚合操作


UpdateMode:更新模式


每一个批次的数据处理完毕后,将结果表新增的行或被修改的行输出至外部系统,如果查询没有包含聚合操作,等同Append Mode


输入表中数据源一旦完成参与的查询操作,就被清除,只保留查询结果



举报

相关推荐

0 条评论