技术标签: 实战-Spark Structured Streaming spark实战 spark structur stream spark结构化流
滑动窗口比翻滚窗口要复杂一些,滑动窗口的窗口之间有重叠的区域,这个区域会被计算两次。那么,为什么要这么设计呢?滑动窗口通常用于流量控制,资源保护等场景,它可以让控制更加平滑。
顾名思义,该窗口非固定,而是滑动的。在滑动窗口中,元组被分组在一个窗口中,该窗口根据指定的间隔在数据流中滑动。滑动窗口可以包含重叠的数据,一个数据可以属于多个滑动窗口。
可以认为窗口每次的滑动就是产生了一个新的窗口。就需要开始该窗口的计算。当然若前一个窗口还没有计算还会继续计算,所以就会产生一些重叠的区域。关于滑动窗口的详细的原理介绍,可以查看:《窗口基本原理》一文。
滑动窗口的基本使用方法如下:
from pyspark.sql.functions import explode
from pyspark.sql.functions import split
from pyspark.sql.functions import window
lines = spark.readStream()....load()
words = lines.select(...)
wordCounts = words.groupBy(
window(words.timestamp, "5 seconds"),
words.word
).count()
在pyspark终端中输入以下代码:
from pyspark.sql import SparkSession
from pyspark.sql.functions import explode
from pyspark.sql.functions import split
from pyspark.sql.functions import window
# 需要添加时间戳选项
lines = spark
.readStream
.format("socket")
.option("host", "localhost")
.option("port", 10002)
.option('includeTimestamp', 'true')
.load()
# 处理数据:可以按自己的逻辑来处理数据
words = lines.select(
explode(split(lines.value, ' ')).alias('word'),
lines.timestamp
)
# 定义一个10秒的滑动窗口,每5秒更新一次结果
wordCounts = words.groupBy(
window(words.timestamp, "10 seconds", ”5 seconds“),
words.word
).count().orderBy('window')
# 使用complete模式
# 打印到终端
query = wordCounts
.writeStream
.outputMode("complete")
.format("console")
.option('truncate', 'false')
.start()
在终端依次不间断输入以下字符串:
[hover@ahi-vm-192-168-4-141 ~]$ nc -lk 10002
this is a
this is b
this is c
this is d
this is e
that is g
------------------------------------------
Batch: 1
-------------------------------------------
+------------------------------------------+----+-----+
|window |word|count|
+------------------------------------------+----+-----+
|[2020-12-15 03:02:40, 2020-12-15 03:02:50]|is |1 |
|[2020-12-15 03:02:40, 2020-12-15 03:02:50]|a |1 |
|[2020-12-15 03:02:40, 2020-12-15 03:02:50]|this|1 |
|[2020-12-15 03:02:45, 2020-12-15 03:02:55]|this|2 |
|[2020-12-15 03:02:45, 2020-12-15 03:02:55]|b |1 |
|[2020-12-15 03:02:45, 2020-12-15 03:02:55]|is |2 |
|[2020-12-15 03:02:45, 2020-12-15 03:02:55]|a |1 |
|[2020-12-15 03:02:50, 2020-12-15 03:03:00]|this|3 |
|[2020-12-15 03:02:50, 2020-12-15 03:03:00]|c |1 |
|[2020-12-15 03:02:50, 2020-12-15 03:03:00]|d |1 |
|[2020-12-15 03:02:50, 2020-12-15 03:03:00]|b |1 |
|[2020-12-15 03:02:50, 2020-12-15 03:03:00]|is |3 |
|[2020-12-15 03:02:55, 2020-12-15 03:03:05]|is |3 |
|[2020-12-15 03:02:55, 2020-12-15 03:03:05]|this|3 |
|[2020-12-15 03:02:55, 2020-12-15 03:03:05]|c |1 |
|[2020-12-15 03:02:55, 2020-12-15 03:03:05]|d |1 |
|[2020-12-15 03:02:55, 2020-12-15 03:03:05]|e |1 |
|[2020-12-15 03:03:00, 2020-12-15 03:03:10]|is |2 |
|[2020-12-15 03:03:00, 2020-12-15 03:03:10]|that|1 |
|[2020-12-15 03:03:00, 2020-12-15 03:03:10]|e |1 |
+------------------------------------------+----+-----+
从以上例子中可以看到有些输入单词被统计了两次。这些被统计了两次的单词就是滑动窗口的时间段的重合部分。
本文介绍了如何使用滑动窗口来进行单词计数。
文章浏览阅读254次。在日常生活工作学习中,我们经常接触各种涉及到语音的场景,比如开会,上网课,看视频,有些时候我们需要把相关的语音转换成文稿进行使用,那怎么能快速完成语音转文字呢?下面就给大家分享几个好用的语音转文字方法,一起来看看吧~
文章浏览阅读1.8w次。软件以程序员为本————《程序员》 谨以此文献给所有想当程序员的朋友 (一) 文章由来及个人经历 我是一名计算机专业的本科毕业生,毕业已经1年多了。毕业后从事的是软件编程工作,经常有其他专业的朋友想从事软件编程工作,向我请教如何,因为我自觉涉行不深,不敢信口开河,无奈朋友信任,我不得不郑重考虑一下这个问题了,来帮助朋友选择和回报朋友的信任。 这也就是此文的由来。 还是先谈谈我个人的经历吧。(_做程序员为什么也只能干1年
文章浏览阅读1.5k次。本文所讲述的是在使用LNMP或者LAMP搭建站点之后,如何部署多台web服务器,并使用NFS服务实现这多台服务器能够同步数据。 有关LNMP建站的相关文档可参考我的这篇博客: 传送门 目录实验环境介绍:NFSNFS参数详解NFS服务器的部署Web集群部署实验结果:实验环境介绍:在做该实验的时候,博主已经搭建好了LNMP的环境,并部署好了一个站点,博主的..._利用局域网搭建服务器集群
文章浏览阅读371次。C 中的setter和getter_c语言 setter getter
文章浏览阅读596次。#include <Windows.h> #include <Aclapi.h> #pragma comment (lib,"Advapi32.lib") void main() { DWORD dwRet; LPSTR SamName = "MACHINE\\SAM\\SAM"; PSECURITY_DESCRIPTOR pSD = NULL; PACL ..._c++ 修改访问注册表的权限
文章浏览阅读514次。一个快捷操作XML数据库的Javascript接口对象,包含select、count、tables、fields等方法,能够像操作mysql等其它数据库一样操作XML数据库。_查询除了用xml以外还有什么
文章浏览阅读6.7k次,点赞3次,收藏4次。赋某日期为日期类型 new Date(myYear,myMonth,myDate);//当myDate为0时,返回当前月份的上月末日期 当前日期 now new Date() 设置日期分钟为0 now.setMinutes(0) 设置当前日期秒为1 now.setSeconds(1) 当前日期..._js getdatenow
文章浏览阅读2k次,点赞3次,收藏7次。转载: EJB到底是什么,真的那么神秘吗 1. 我们不禁要问,什么是”服务集群”?什么是”企业级开发”? 既然说了EJB 是为了”服务集群”和”企业级开发”,那么,总得说说什么是所谓的”服务 集群”和”企业级开发”吧! 这个问题其实挺关键的,因为J2EE 中并没有说明白,也没有具体的指标或者事例告诉 广大程序员什么时候用EJB什么时候不用。于是大家都产生一些联想,认为EJB”分布式运 算”指_csdn ejb
文章浏览阅读74次。<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> &.._vue-model修饰符
文章浏览阅读582次。面试的一般流程:首先要简历做的好,才能通过简历海选进入第一轮笔试;其次要基础知识扎实,才能过笔试进入第二轮面试环节;最后,面试时自信大方,谈吐得当,get the offer!简历编写简历获取面试资格(符合公司招聘要求,最重要亮点,公司关心你的最强的部分,求职意向明确便于HR分类;HR最关心:工作经历,教育背景(HR可能不懂技术,置顶;技术名词英文化专业化);不同面试环节人_c语言程序项目简历怎么学
文章浏览阅读594次。初始化_编程语初始化的过程是什么
文章浏览阅读1.6k次。目录drozer下载drozer安装drozer使用建立手机端和PC端的连接确定攻击面测试activities exported (容易绕过登陆验证)测试 content provider(易造成数据库泄露,sql注入等问题)利用暴露的content provider进行sql注入从File System-backed Content Providers获取信息测试services exported (权限提升)测试broadcast receivers exported(拒绝服务)drozer下载下载_drozer agent