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

文章目录

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

优点

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

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

你可能感兴趣的:(spark-鲨鱼)