当前位置: 首页 > news >正文

Spark Streaming核心编程总结(四)

 一、有状态转化操作:UpdateStateByKey
概念与作用
UpdateStateByKey 用于在流式计算中跨批次维护状态(如累加统计词频)。它允许基于键值对形式的DStream,通过自定义状态更新函数,将历史状态与新数据结合,生成包含最新状态的DStream。

实现步骤
1. 定义状态类型:状态可以是任意数据类型(如示例中的Int类型)。
2. 定义状态更新函数:接收当前批次的数据序列和旧状态,返回新状态。
 

val updateFunc = (values: Seq[Int], state: Option[Int]) => {
val currentCount = values.sum
val previousCount = state.getOrElse(0)
Some(currentCount + previousCount)
}



3. 配置检查点目录:必须设置检查点以持久化状态,确保容错性。

ssc.checkpoint("./ck")


4. 应用操作:通过updateStateByKey将函数作用于键值对DStream。

val stateDStream = pairs.updateStateByKey[Int](updateFunc)



 二、窗口操作:WindowOperations
概念与作用
窗口操作基于时间窗口动态处理数据,适用于滑动统计(如最近12秒内的词频)。需定义两个参数:
 窗口时长:计算的时间范围(如Seconds(12))。
 滑动步长:触发计算的间隔(如Seconds(6))。

实现示例

val wordCounts = pairs.reduceByKeyAndWindow(
(a: Int, b: Int) => a + b, // 聚合函数
Seconds(12), // 窗口时长
Seconds(6) // 滑动步长
)


 三、DStream输出操作
输出操作触发DStream的实际计算,支持多种数据落地方式:

1. 基础输出
 print():打印每批次前10个元素,用于调试。
 saveAsTextFiles / saveAsObjectFiles / saveAsHadoopFiles:将数据保存为文本、序列化文件或Hadoop格式。

2. 通用输出:foreachRDD
允许对每个RDD执行自定义操作(如写入数据库)。需注意:
 连接管理:避免在Driver端创建连接(序列化问题),应在foreachPartition中按分区创建。
 资源优化:每个分区建立一次连接,而非每条数据,减少开销。

示例:

wordCounts.foreachRDD { rdd =>
rdd.foreachPartition { partition =>
val connection = createDatabaseConnection()
partition.foreach(data => connection.write(data))
connection.close()
}
}

http://www.xdnf.cn/news/179803.html

相关文章:

  • QtDesigner中的Spacers弹簧/间隔器
  • 一主多从+自组网络,无线模拟量信号传输专治布线PTSD
  • C语言(3)—分支和循环
  • WinForm真入门(18)——DateTimePicker‌控件解析
  • 13.组合模式:思考与解读
  • MCP实战-本地MCP Server + Client实战
  • 创建一个开机自启的服务
  • 题海拾贝:P2858 [USACO06FEB] Treats for the Cows G/S
  • 大模型图像编辑那家强?
  • 多模态常见面试题
  • 新魔百和CM311-5_CH/YST/ZG代工_GK6323V100C_2+8G蓝牙版_强刷卡刷固件包(可救砖)
  • SpringMVC 前后端数据交互 中文乱码
  • 【深度剖析】贵州茅台的数字化转型(2025)(上篇)
  • 第7章 内部类与异常类
  • 【蓝桥杯省赛真题57】Scratch穿越病毒区 蓝桥杯scratch图形化编程 中小学生蓝桥杯省赛真题讲解
  • Vue.js 核心特性解析:响应式原理与组合式API实践
  • 论文检索相关网站
  • ‌RISC-V架构的低功耗MCU多电压域优化设计
  • final static 中是什么final static联合使用呢
  • 【算法刷题】
  • MySQL 8.0 忘记登录密码 mysqld --init-file重置
  • AG32 MCU系列三合一芯片,MCU+ 2K cpld + 64Mbit PSRAM,一颗芯片同时满足多种需求。
  • 清华团队提出时序聚类数据库内高效方案,已被SIGMOD 2025接收
  • 【Tools】chezmoi 跨多台不同的机器管理 dotfiles 的工具
  • 缓存并发更新的挑战
  • Python生活手册-元组:保险柜与瑞士军刀
  • 基于javaweb的SpringBoot新闻发布系统设计与实现(源码+文档+部署讲解)
  • 业务中台与数据中台:企业数字化转型的核心引擎
  • 解决qnn htp 后端不支持boolean 数据类型的方法。
  • C语言-- 深入理解指针(4)