网站首页 > 技术文章 正文
SparkStreaming之window滑动窗口应用,Spark Streaming提供了滑动窗口操作的支持,从而让我们可以对一个滑动窗口内的数据执行计算操作,本文带大家了解SparkStreaming窗口函数的应用及原理。
窗口函数使用
Window Operations(窗口操作)可以设置窗口大小和滑动窗口间隔来动态的获取当前Streaming的状态。基于窗口的操作会在一个比 StreamingContext 的 batchDuration(批次间隔)更长的时间范围内,通过整合多个批次的结果,计算出整个窗口的结果。下面,通过一张图来描述SparkStreaming的窗口操作,如图所示,每个时间窗口在一个个DStream中划过,每个DSteam中的RDD进入Window中进行合并,操作时生成为窗口化DSteam的RDD。在上图中,该操作被应用在过去的3个时间单位的数据,和划过了2个时间单位。这说明任何窗口操作都需要指定2个参数。
1. window length(窗口长度):窗口的持续时间(上图为3个时间单位)
2. sliding interval (滑动间隔)- 窗口操作的时间间隔(上图为2个时间单位)
让我们用一个例子来说明窗口操作。假设您想通过每 10 秒生成最后 30 秒数据的来扩展word counts。为此,我们必须对过去 30 秒的数据 (word, 1)应用 reduceByKey 操作。这时可以使用reduceByKeyAndWindow 操作完成的,如下所示:
val windowedWordCounts =
pairs.reduceByKeyAndWindow(
(a:Int,b:Int) => (a + b), Seconds(30), Seconds(10)
)
其他的转换算子如下:
在 Spark Streaming 中,数据处理是按批进行的,而数据采集是逐条进行的,因此在 Spark Streaming 中会先设置好批处理间隔,当超过批处理间隔的时候就会把采集到的数据汇总起来成为一批数据交给系统去处理。
对于窗口操作而言,在其窗口内部会有 N 个批处理数据,批处理数据的大小由窗口大小决定,而窗口大小指的就是窗口的持续时间。
在窗口操作中,只有窗口的长度满足了才会触发批数据的处理。除了窗口的长度,窗口操作还有另一个重要的参数,即滑动间隔,它指的是经过多长时间窗口滑动一次形成新的窗口。
滑动间隔默认情况下和批次间隔相同,而窗口大小一般设置得要比它们两个大。在这里必须注意的一点是,滑动间隔和窗口大小一定得设置为批处理间隔的整数倍。
总结
- 对于窗口操作而言,窗口大小和滑动间隔是最重要的两个参数,需要我们合理设置。
- 滑动间隔和窗口大小一定得设置为批处理间隔的整数倍
猜你喜欢
- 2024-10-12 大佬用10小时就把Spark讲完了,附6大技术文档
- 2024-10-12 浅析图数据库 Nebula Graph 数据导入工具——Spark Writer
- 2024-10-12 Spark Streaming 和 Flink 谁是数据开发者的最爱?
- 2024-10-12 分享几点 Spark Streaming 调优实践经验
- 2024-10-12 大数据学习之计算天下——SPARK的那些事
- 2024-10-12 第二篇|Spark core编程指南 spark编程软件
- 2024-10-12 Spark计算引擎 spark是基于什么计算引擎
- 2024-10-12 Spark Shuffle机制 sparkshuffle原理
- 2024-10-12 深度预警:Spark运行原理 简述spark的运行架构和原理
- 2024-10-12 Spark大数据系列学习指南 spark在大数据中的应用
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)