StructuredStreaming基础操作和窗口操作
一、流式DataFrames/Datasets的结构类型推断与划分
◆ 默认情况下,基于文件源的结构化流要求必须指定schema,这种限制确保即
使在失败的情况下也会使用一致的模式来进行流查询。
◆ 对于特殊用例,可以通过设置spark.sql.streaming.schemaInference = true。
此时将会开启Spark自动类型推断功能。
◆ 注意:默认Spark sql中自动类型推断为启动状态。
◆ 当读取数据的目录中出现/key=value/ 的子目录时,Spark将自动递归这些子目
录,产生分区发现。
◆ 如果用户提供的 schema 中出现了这些列, Spark将会根据正在读取的文件路
径进行填充。
◆ 构成分区结构的目录必须在查询开始时是存在的,并且必须保持static 。
➢ 例如,当 /data/year=2015/ 存在时,可以添加 /data/year=2016/,但是更改
分区列将无效的(即通过创建目录 /data/date=2016-04-17/ )。
◆ 注意:如果希望得到的数据可以按照/key=value/这种目录生成时,可以在输出
数据时借助于partitionBy(“columnName”)
二、流式DataFrames/Datasets的操作
◆ 基础操作-Selection, Projection, Aggregation
◆ 基于Event Time的窗口操作
◆ 连接操作
◆ 流式去重操作
◆ 任意状态运算
◆ 不支持操作
2.1 基础操作-Selection, Projection, Aggregation
◆ DataFrames/Datasets上的大多数常用操作都支持流式运算。(后面在讨论不
支持的操作)
◆ 例如:
➢ case class DeviceData(device: String, deviceType: String, signal: Double, time: DateTime) ➢ val df: DataFrame = …
➢ val ds: Dataset[DeviceData] = df.as[DeviceData]
➢ df.select("device").where("signal > 10") ➢ ds.filter(_.signal > 10).map(_.device) ➢ df.groupBy("deviceType").count() ➢ import org.apache.spark.sql.expressions.scalalang.typed
➢ ds.groupByKey(_.deviceType).agg(typed.avg(_.signal))
◆ 可以注册一个流式DataFrames/DataSets作为临时视图,使用SQL命令做查
询操作。
➢ df.createOrReplaceTempView(“ updates”) ➢ spark.sql(“ select count(*) from updates”) ➢ df.isStreaming
2.2基于Event Time的窗口操作
◆ 基于结构化流的滑动事件时间窗口的聚合操作比较简单,与分组聚合非常相似。
在分组聚合中,按照用户指定的列进行分组聚合。在基于窗口的聚合中,按照
每个窗口进行聚合操作
◆ 案例模型:实时处理流单词统计的窗口操作示意图
◆ 窗口操作类似于分组操作
◆ 例子:可以使用groupBy()和window()操作来表示窗口聚合。 ➢ import spark.implicits._ ➢ val words: DataFrame = ... // schema { timestamp: Timestamp, word: String }
➢ val windowedCounts = words.groupBy( window($"timestamp"
, "10 minutes"
, "5 minutes"), $"word" ).count()
StructuredStreaming基础操作和窗口操作的更多相关文章
- Structured-Streaming之窗口操作
Structured Streaming 之窗口事件时间聚合操作 Spark Streaming 中 Exactly Once 指的是: 每条数据从输入源传递到 Spark 应用程序 Exactly ...
- Hadoop基础-通过IO流操作HDFS
Hadoop基础-通过IO流操作HDFS 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.上传文件 /* @author :yinzhengjie Blog:http://www ...
- streaming窗口操作
之前一直对窗口操作不太理解.认为spark streaming本身已经是分片计算,还需要窗口操作干啥. 窗口操作最为简单易懂的场景就是,在M时间间隔计算一次N时间内的热搜.当M=N的时候,就像上述所说 ...
- jQuery碎语(1) 基础、选择要操作的元素、处理DOM元素
1.基础 jquery对象集: $():jquery对象集合 获取jquery对象集中的元素: 使用索引获取包装器中的javascript元素:var temp = $('img[alt]')[0] ...
- 搞定vim的窗口操作
最近在给学生演示数据结构代码时,发现用一般的方法总会有不方便,如果使用ide又觉得太浪费了,后来觉得用vim就够了,使用buffer总会需要页面调来跳出,学生看起来容易迷糊.所以就研究了下vim的窗口 ...
- Update(Stage4):sparksql:第3节 Dataset (DataFrame) 的基础操作 & 第4节 SparkSQL_聚合操作_连接操作
8. Dataset (DataFrame) 的基础操作 8.1. 有类型操作 8.2. 无类型转换 8.5. Column 对象 9. 缺失值处理 10. 聚合 11. 连接 8. Dataset ...
- python基础操作以及hdfs操作
目录 前言 基础操作 hdfs操作 总结 一.前言 作为一个全栈工程师,必须要熟练掌握各种语言...HelloWorld.最近就被"逼着"走向了python开发之路, ...
- vue.js初级入门之最基础的双向绑定操作
首先在页面引入vue.js以及其他需要用到的或者可能要用到的插件(这里我多引用了bootstrap和jquery) 引用的时候需要注意文件的路径,准备工作这样基本就完成了,下面正式开始入门. vue. ...
- 转-JS子窗口创建父窗口操作父窗口
Javascript弹出子窗口 可以通过多种方式实现,下面介绍几种方法 (1) 通过window对象的open()方法,open()方法将会产生一个新的window窗口对象 其用法为: window ...
随机推荐
- linux的/etc/passwd、/etc/shadow、/etc/group和/etc/gshadow
1./etc/passwd 存储用户信息 [root@oldboy ~]# head /etc/passwd root:x:::root:/root:/bin/bash bin:x:::bin:/b ...
- Bug:No mapping for GET /onepill//swagger-ui.html
SpringBoot使用Swagger2本来可以使用的,后来出现的异常No mapping for GET /swagger-ui.html,这个异常其实不用怎么解释,说白了就是找不到了. 遇到这种情 ...
- 集合和Iterator迭代器
集合 集合是java中提供的一种容器,可以用来存储多个数据. 注意: ①.集合只能存放对象.比如你存一个 int 型数据 1放入集合中, 其实它是自动转换成 Integer 类后存入的,Java中每一 ...
- 扯扯Java中的锁
前言 又过去了一个周末,最近陆陆续续的看了<并发编程的艺术>一书,对锁有不少感悟,这次就聊聊Java中的锁事.本文纯粹是漫谈,想到哪说到哪,但准确性肯定会保证,倘若有不正确之处,还请交流指 ...
- 对‘sqrt’未定义的引用
首先, 引用数学库 #include<math.h> 引用数学库时,要在编译后加上-lm 是每一个都要加!! 如下: gcc su.c -o su.o -lm gcc -g su.c - ...
- 第二部分_Mac技巧
原文是"池建强"的微信文章,公众号为"MacTalk" 第五十一天 mdfind是一个非常灵活的全局搜索命令,类似Spotlight的命令行模式,可以在任何目录 ...
- 使用MacOS直播
参考链接:https://www.jianshu.com/p/94f42a793a7e 参考链接:https://blog.dreamtobe.cn/live_guideline/ 所需软件 密码: ...
- 线程_ThreadLocal
import threading # 创建ThreadLocal对象 house = threading.local() def process_paper(): user = house.user ...
- PHP restore_error_handler() 函数
定义和用法 restore_error_handler() 函数恢复之前的错误处理程序. 该函数用于在通过 set_error_handler() 函数改变后恢复之前的错误处理程序. 该函数总是返回 ...
- PHP import_request_variables() 函数
import_request_variables() 函数将 GET/POST/Cookie 变量导入到全局作用域中.该函数在最新版本的 PHP 中已经不支持.高佣联盟 www.cgewang.com ...