《零基础入门Spark》学习笔记 Day 13

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:仅输出内容有根据输入的计算结果

相关推荐
数智工坊6 小时前
机器人运动控制:采样、优化与学习三大流派深度对比与实战
android·学习·机器人
ZC跨境爬虫6 小时前
跟着 MDN 学JavaScript day_7:数学运算与逻辑判断实战测试
开发语言·前端·javascript·学习·ecmascript
MartinYeung59 小时前
[论文学习]隐私保护联邦特徵选择与差分隐私的的工程实践框架
学习
qeen879 小时前
【C++】类与对象之类的默认成员函数(二)
android·c语言·开发语言·c++·笔记·学习
m0_736034859 小时前
存储基础和虚拟化
笔记
Flandern111110 小时前
Pull Requests(PR)
学习·github·pr
nashane10 小时前
HarmonyOS 6学习:JsCrash“闪退”法医指南——从FaultLog堆栈还原崩溃现场的终极手册
学习·华为·harmonyos
for_ever_love__10 小时前
UI学习:UICollectionView瀑布流
学习·ui·ios·objective-c·cocoa
AOwhisky11 小时前
MySQL 学习笔记(第六期):MySQL 备份与恢复
运维·数据库·笔记·学习·mysql·云计算
_李小白11 小时前
【android opencv学习笔记】Day 32:直线检测之霍夫变换
android·opencv·学习