window操作就是窗口函数。Spark Streaming提供了滑动窗口操作的支持,从而让我们可以对一个滑动窗口内的数据执行计算操作。每次掉落在窗口内的RDD的数据,会被聚合起来执行计算操作,然后生成的RDD,会作为window DStream的一个RDD。比如下图中,就是对每三秒钟的数据执行一次滑动窗口计算,这3秒内的3个RDD会被聚合起来进行处理,然后过了两秒钟,又会对最近三秒内的数据执行滑动窗口计算。所以每个滑动窗口操作,都必须指定两个参数,窗口长度以及滑动间隔,而且这两个参数值都必须是batch间隔的整数倍。

案例演示

以nc作为源头进行测试

 nc -lk mypc01 10087
import org.apache.spark.SparkConf
import org.apache.spark.rdd.RDD
import org.apache.spark.streaming.dstream.{DStream, ReceiverInputDStream}
import org.apache.spark.streaming.{Duration, Seconds, StreamingContext}object WindowDemo1 extends App {private val conf = new SparkConf().setAppName("test").setMaster("local[*]")private val duration: Duration = Seconds(10)//构建StreamingContextprivate val ssc: StreamingContext = new StreamingContext(conf, duration)//以socket作为源private val dstream: ReceiverInputDStream[String] = ssc.socketTextStream("mypc01", 10087)reduceByKeyAndWindowDemo().print()ssc.start()ssc.awaitTermination()def reduceByKeyAndWindowDemo() = {val value: DStream[(String, Int)] = dstream.map((_, 1)).reduceByKeyAndWindow((x: Int, y: Int) => x + y, Seconds(30), Seconds(20))val value2: DStream[(String, Int)] = value.transform((rdd: RDD[(String, Int)]) => {//降序排序并取前三val tuples: Array[(String, Int)] = rdd.sortBy((_._2), ascending = false).take(3)//Array转为RDD,因为transform要返回一个RDDval value1: RDD[(String, Int)] = ssc.sparkContext.makeRDD(tuples)value1})value2}
}

方法解析

def reduceByKeyAndWindow(reduceFunc: (V, V) => V, windowDuration: Duration): DStream[(K, V)]

通过在此DStream的滑动窗口上应用reduceByKey来返回新的DStream。 与DStream.reduceByKey()类似,但将其应用于滑动窗口。 新的DStream生成与该DStream具有相同间隔的RDD。 哈希分区用于生成具有Spark默认分区数的RDD。
参数:
reduceFunc –关联和交换的reduce函数
windowDuration –窗口的宽度; 必须是此DStream批处理间隔的倍数

SparkStreaming窗口入门相关推荐

  1. C++模拟键盘操作窗口入门

    C++模拟键盘操作窗口入门之文件监控操作句柄操作 #include <iostream> #include <windows.h> #include <tchar.h&g ...

  2. SparkStreaming DStream入门及其算子应用

    什么是Dstream? 离散流(DStream)是Spark Streaming中的基本抽象,是表示相同数据流的RDD(相同类型)的连续序列. DStreams可以使用StreamingContext ...

  3. 漫画:滑动窗口入门题目,没有之一

    今天是小浩算法"365刷题计划"第83天 .昨天写了一篇感悟,没想到那么受欢迎.几百人转发,好几千人阅读,虚荣心得到了极大的满足.今天继续为大家分享一道经典面试题目. 01 PAR ...

  4. spark-streaming从入门到精通

    1.spark streaming获取kafka的数据有两种形式:(现在基本都是用direct方式了) receiver 通过zookeeper来连接kafka队列来获取数据.如果要做到容错,就要启用 ...

  5. SparkStreaming - 窗口函数(窗口操作)

    窗口操作就是把多个采集周期设置成一个窗口,一起来计算,然后进行滑动,根据设置的滑动大小. 窗口大小和滑动大小,要是采集周期的倍数 package date_10_17_SparkStreamingim ...

  6. SparkStreaming编程

    0. SparkStreaming 流式计算简介 SparkStreaming实时处理入门案例 SparkStreaming和HDFS整合 SparkStreaming与Kafka整合 SparkSt ...

  7. 大数据开发笔记(八):Sparkstreaming

    一.Spark Streaming处理框架: Spark Streaming接收Kafka.Flume.HDFS等各种来源的实时输入数据,可以使用诸如map.reduce.join等高级函数进行复杂算 ...

  8. Sparkstreaming实时开发详解

    一.Spark Streaming处理框架: Spark Streaming接收Kafka.Flume.HDFS等各种来源的实时输入数据,可以使用诸如map.reduce.join等高级函数进行复杂算 ...

  9. sparkstreaming的实时黑名单过滤太慢

    官网推荐如下这种方法进行过滤,但是这种方法其实有很大弊端,left out join如果黑名单数据量很大就会很伤,其实真不好. object TransformBlackList {def main( ...

最新文章

  1. Altium Designer隐藏或显示元件名字
  2. 结构体 CString QString 成员赋值出错
  3. 阿里邮箱发布“Mail+”战略 有望与畅捷通工作圈互通互联
  4. 40个精心设计的免费的社交网络图标
  5. tpcc mysql下载_tpcc-mysql 试用
  6. Openfire3.9.3源代码导入eclipse中开发配置指南(转载)
  7. python xgboost安装_win7 64 python2 xgboost安装
  8. beego 例子_beego框架代码分析
  9. IBM云计算带我们进入新服务经济时代
  10. leetcode python3 简单题234. Palindrome Linked List
  11. 4.1 数据库的设置
  12. 计算机组成原理英文词汇,“计算机组成原理”课专业词汇英汉对照.pdf
  13. echarts中中国地图飞机路线使用
  14. Android Button英文全部大写问题
  15. 仓储系统之入库、出库理解浅谈
  16. filter过滤器的FilterConfig 类
  17. ABP 详解系列9:基于ABP框架实现RBAC(角色访问控制)
  18. 数据分析项目实战day1
  19. 【MQTT协议详解】MQTT协议
  20. 拒绝ssh远程暴力破解-以centos7及centos8为例

热门文章

  1. 华夏银行招聘计算机笔试题,2019华夏银行招聘结构化面试试题及答案
  2. 此版本的visual studio无法打开下列项目_深度学习实现高精度钢琴曲转谱Piano transcription项目简明使用教程...
  3. 计算机与信息处理基础知识教案,高效的信息处理工具——计算机基础知识教案...
  4. Milne格式MATLAB,matlab考试题
  5. 外联样式表添加到html中,CSS联样式表之内联式、外联式和嵌入式
  6. layui的表单控件的input文本框赋值
  7. java 向下转型运行时错误_java多态和向下转型问题。
  8. uniapp调用c语言方法,uni-app 入坑指南-web开发
  9. oracle不显示表和过程,oracle表连接——处理连接过程中另外一张表没有相关数据不显示问题...
  10. php7 捕获语法错误,PHP7 method_exists未捕获错误:函数名称必须是字符串