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

可作外链的网站/网络营销相关的岗位有哪些

可作外链的网站,网络营销相关的岗位有哪些,邢台做移动网站的公司,低价网站建设怎么样Structured Streaming 之 Event Time 解析 [酷玩 Spark] Structured Streaming 源码解析系列 ,返回目录请 猛戳这里 「腾讯广点通」技术团队荣誉出品 本文内容适用范围: * 2017.07.11 update, Spark 2.2 全系列 √ (已发布:2.2.0) * 2017.…

Structured Streaming 之 Event Time 解析

[酷玩 Spark] Structured Streaming 源码解析系列 ,返回目录请 猛戳这里

「腾讯·广点通」技术团队荣誉出品

本文内容适用范围:
* 2017.07.11 update, Spark 2.2 全系列 √ (已发布:2.2.0)
* 2017.10.02 update, Spark 2.1 全系列 √ (已发布:2.1.0, 2.1.1, 2.1.2)

阅读本文前,请一定先阅读 Structured Streaming 实现思路与实现概述 一文,其中概述了 Structured Streaming 的实现思路,有了全局概念后再看本文的细节解释。

Event Time !

Spark Streaming 时代有过非官方的 event time 支持尝试 [1],而在进化后的 Structured Streaming 里,添加了对 event time 的原生支持。

我们来看一段官方 programming guide 的例子 [2]:

import spark.implicits._val words = ... // streaming DataFrame of schema { timestamp: Timestamp, word: String }// Group the data by window and word and compute the count of each group
// Please note: we'll revise this example in <Structured Streaming 之 Watermark 解析>
val windowedCounts = words.groupBy(window($"timestamp", "10 minutes", "5 minutes"),$"word"
).count()

这里的执行过程如下图。

  • 我们有一系列 arriving 的 records
  • 首先是一个对着时间列 timestamp 做长度为10m,滑动为5m 的 window() 操作
    • 例如上图右上角的虚框部分,当达到一条记录 12:22|dog 时,会将 12:22 归入两个窗口 12:15-12:2512:20-12:30,所以产生两条记录:12:15-12:25|dog12:20-12:30|dog,对于记录 12:24|dog owl 同理产生两条记录:12:15-12:25|dog owl12:20-12:30|dog owl
    • 所以这里 window() 操作的本质是 explode(),可由一条数据产生多条数据
  • 然后对 window() 操作的结果,以 window 列和 word 列为 key,做 groupBy().count() 操作
    • 这个操作的聚合过程是增量的(借助 StateStore)
  • 最后得到一个有 windowwordcount 三列的状态集

处理 Late Data

还是沿用前面 window() + groupBy().count() 的例子,但注意有一条迟到的数据 12:06|cat :

可以看到,在这里的 late data,在 State 里被正确地更新到了应在的位置。

OutputModes

我们继续来看前面 window() + groupBy().count() 的例子,现在我们考虑将结果输出,即考虑 OutputModes:

(a) Complete

Complete 的输出是和 State 是完全一致的:

(b) Append

Append 的语义将保证,一旦输出了某条 key,未来就不会再输出同一个 key。

所以,在上图 12:10 这个批次直接输出 12:00-12:10|cat|112:05-12:15|cat|1 将是错误的,因为在 12:20 将结果更新为了 12:00-12:10|cat|2,但是 Append 模式下却不会再次输出 12:00-12:10|cat|2,因为前面输出过了同一条 key 12:00-12:10|cat 的结果12:00-12:10|cat|1

为了解决这个问题,在 Append 模式下,Structured Streaming 需要知道,某一条 key 的结果什么时候不会再更新了。当确认结果不会再更新的时候(下一篇文章专门详解依靠 watermark 确认结果不再更新),就可以将结果进行输出。

如上图所示,如果我们确定 12:30 这个批次以后不会再有对 12:00-12:10 这个 window 的更新,那么我们就可以把 12:00-12:10 的结果在 12:30 这个批次输出,并且也会保证后面的批次不会再输出 12:00-12:10 的 window 的结果,维护了 Append 模式的语义。

(c) Update

Update 模式已在 Spark 2.1.1 及以后版本获得正式支持。

如上图所示,在 Update 模式中,只有本执行批次 State 中被更新了的条目会被输出:

  • 在 12:10 这个执行批次,State 中全部 2 条都是新增的(因而也都是被更新了的),所以输出全部 2 条;
  • 在 12:20 这个执行批次,State 中 2 条是被更新了的、 4 条都是新增的(因而也都是被更新了的),所以输出全部 6 条;
  • 在 12:30 这个执行批次,State 中 4 条是被更新了的,所以输出 4 条。这些需要特别注意的一点是,如 Append 模式一样,本执行批次中由于(通过 watermark 机制)确认 12:00-12:10 这个 window 不会再被更新,因而将其从 State 中去除,但没有因此产生输出。

总结

本文解析了 Structured Streaming 原生提供的对 event time 的支持,包括 window()、groupBy() 增量聚合、对 late date 的支持、以及在 Complete, Append, Update 模式下的输出结果。

扩展阅读

  1. Github: org/apache/spark/sql/catalyst/analysis/Analyzer.scala#TimeWindowing
  2. Github: org/apache/spark/sql/catalyst/expressions/TimeWindow

参考资料

  1. https://github.com/cloudera/spark-dataflow
  2. Structured Streaming Programming Guide - Window Operations on Event Time
http://www.jmfq.cn/news/4764169.html

相关文章:

  • 24小时有效地址域名/抖音视频seo霸屏
  • 温州建设工程网站/seo关键词排名优化销售
  • 网站建设的目标是什么/网络营销推广
  • 校友会网站建设方案/怎么查找关键词排名
  • 如何做adsense网站/市场调研报告1500字
  • 青岛做网站建设哪家好/网站目录提交
  • 做减肥网站/app注册推广任务平台
  • 免费网站访问限制系统/网站seo优化分析
  • 优化方案化学/网站seo快速排名优化的软件
  • 贵阳手机网站建设公司/北京seo排名收费
  • 昆明seo网站推广/上海网络推广服务
  • 网站建设制作团队/市场调研方案怎么写
  • 做黄色网站多少年/有哪些平台可以做推广
  • 网站建设公司 跨界鱼科技优/关键词seo排名优化软件
  • 贵州成品网站/站长统计ios
  • seo优化网站模板/央视网新闻
  • 长沙做php的网站建设/最近的时事新闻
  • 建设部项目经理认证网站/百度一下就知道百度首页
  • 手机网站策划书方案/苹果cms永久免费全能建站程序
  • 代购网站怎么做/广西seo快速排名
  • 技术开发合同/郑州seo代理外包公司
  • 5个搜索引擎作弊的网站/seo优化的内容有哪些
  • 北京网站建设公司服务哪家好/南京百度快照优化排名
  • 网站建设硬件要求/seo网站建设优化
  • 宣传策划方案/电商seo优化是什么意思
  • 蓝色网站配色/武汉网站优化公司
  • 网站建设推广服务商/下载百度app并安装
  • 做网站费用怎么付/长沙网红奶茶
  • 网站的竞争对手/竞价托管开户
  • 郑州营销型网站建设哪家好/ui设计培训班哪家好