Structured Streaming
数据加载
SparkSession的readStream API 来创建DataFrame
Scala
var df: DataFrame = spark.readStream
.format("socket")
.option("host",host)
.option("port",port)
.load()
format:指定流处理的数据源头类型
option:与数据源头有关的若干选项
load:将数据流加载进Spark
流计算有3个重要的基础概念,比如flink也是如此
Source:流计算的数据源头
Processing:负责对数据流进行转换、过滤、聚合等操作
Sink:指的是数据流向的目的地
数据处理
Scala
/**
使用DataFrame API完成Word Count计算
*/
// 首先把接收到的字符串,以空格为分隔符做拆分,得到单词数组words
df = df.withColumn("words", split($"value", " "))
// 把数组words展平为单词word
.withColumn("word", explode($"words"))
// 以单词word为Key做分组
.groupBy("word")
// 分组计数
.count()
数据输出
Scala
/**
将Word Count结果写入到终端(Console)
*/
df.writeStream
// 指定Sink为终端(Console)
.format("console")
// 指定输出选项
.option("truncate", false)
// 指定输出模式
.outputMode("complete")
//.outputMode("update")
// 启动流处理应用
.start()
// 等待中断指令
.awaitTermination()
一般来说,Structured Streaming支持3种Sink输出模式
Complete mode:输出到目前为止处理过的全部内容
Append mode:仅输出最近一次作业的计算结果
Update mode:仅输出内容有根据输入的计算结果