Spark Streaming中的Window操作
窗口函数,就是在DStream流上,以一个可配置的长度为窗口,以一个可配置的速率向前移动窗口,根据窗口函数的具体内容,分别对当前窗口中的这一波数据采取某个对应的操作算子。
需要注意的是窗口长度,和窗口移动速率需要是batch time的整数倍。

**spark streaming 中有三个关于时间的参数,分别如下:
**
-
窗口时间
windowDuration:当前窗口要统计多长时间的数据,是批量时间的整数倍 -
滑动时间
slideDuration:要多长时间更新一次结果,是批量时间的整数倍 -
批量时间
batchDuration:多长时间创建一个批次,与实际业务无关,只与数据量有关,数据量大则可以设置短一些,数据量小则设置长一些,但必须小于其他两个时间。
1、window(windowLength, slideInterval)
该操作由一个DStream对象调用,传入一个窗口长度参数,一个窗口移动速率参数,然后将当前时刻当前长度窗口中的元素取出形成一个新的DStream。
package cn.kgc.kb09.Spark
import org.apache.kafka.clients.consumer.{
ConsumerConfig, ConsumerRecord}
import org.apache.spark.SparkConf
import org.apache.spark.streaming.{
Seconds, StreamingContext}
import org.apache.spark.streaming.dstream.{
DStream, InputDStream}
import org.apache.spark.streaming.kafka010.{
ConsumerStrategies, KafkaUtils, LocationStrategies}
object SparkWindowDemo {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setMaster("local[2]").setAppName("KafkaDemo")
val streamingContext = new StreamingContext(conf,Seconds(5))
val kafkaParams: Map[String, String] = Map(
(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG -> "192.168.247.201:9092"),
(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG -> "org.apache.kafka.common.serialization.StringDeserializer"),
(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG -> "org.apache.kafka.common.serialization.StringDeserializer"),
(ConsumerConfig.GROUP_ID_CONFIG, "kafkaGroup1")
)
val kafkaStream: InputDStream[ConsumerRecord[String, String]] =
KafkaUtils.createDirectStream(
streamingContext,
LocationStrategies.PreferConsistent,
ConsumerStrategies.Subscribe(Set("sparkKafkaDemo"), kafkaParams)
)
// 注意:窗口长度,窗口移动速率需要是batch time的整数倍
val numStream: DStream[(String, Int)] =
kafkaStream.flatMap(line => line.value().toString.split("\\s+"))
.map((_, 1))
.window(Seconds(20),Seconds(10))
numStream.print()
streamingContext.start()
streamingContext.awaitTermination()

本文详细介绍了Spark Streaming中的Window操作,包括window、countByWindow、countByValueAndWindow、reduceByWindow和reduceByKeyAndWindow等算子的使用,强调了窗口长度、滑动时间与批量时间的关系,并指出在使用某些操作时需要设置checkpoint。
最低0.47元/天 解锁文章
742

被折叠的 条评论
为什么被折叠?



