SparkStreming之updateStateByKey
正文
上一篇简单的写了一个socketTextStream的demo,这个问题就是每一次不能将之前和之后的数据进行合并统一。接下来我们通过demo进行把着这个问题解决。
val conf = new SparkConf().setMaster("local[2]").setAppName("updateState")
val sc: StreamingContext = new StreamingContext(conf, Seconds(2))
sc.checkpoint("hdfs://hadoop01:9000/streamcp")
val textStream: ReceiverInputDStream[String] = sc.socketTextStream("hadoop01", 9999)
val map: DStream[(String, Int)] = textStream.flatMap(_.split(",")).map((_, 1))
//目的在于将当前读取到的和上一次读取到的一样的key合并
val dStream = map.updateStateByKey((value: Seq[Int], state: Option[Int]) => {
//计算key此次出现的个数
val currentCount = value.sum
//上一次结果
val lastCount = state.getOrElse(0)
//因为看源码返回结果是Option[S],结果不是None就是Some,但是我们现在处理了所以只有Some即可
Some(currentCount + lastCount)
})
dStream.print()
sc.start()
sc.awaitTermination()
sc.stop()
}
通过代码中的注释已经算是对这个方法的解释了,因为他可以拿到上一个计算结果,同时能读到当前数据,进行合并就显得简单的多了sc.checkpoint("hdfs://hadoop01:9000/streamcp")此目的是为了搭配updateStateBykey使用,如果不加则会报错提示缺少checkpoint,我们创建了也会在hdfs的目录中看到这个节点,同时这个节点下会生产文件数据。

这是在运行程序后不停的去checkpoint的数据,如下红色框中是此程序输入的内容

然后我们的代码运行结果如下,可以看出来,每次输入的结果已经可以汇总出来。

Read more books, read good books
SparkStreming之updateStateByKey的更多相关文章
- spark streaming - kafka updateStateByKey 统计用户消费金额
场景 餐厅老板想要统计每个用户来他的店里总共消费了多少金额,我们可以使用updateStateByKey来实现 从kafka接收用户消费json数据,统计每分钟用户的消费情况,并且统计所有时间所有用户 ...
- 【Spark篇】---SparkStreaming算子操作transform和updateStateByKey
一.前述 今天分享一篇SparkStreaming常用的算子transform和updateStateByKey. 可以通过transform算子,对Dstream做RDD到RDD的任意操作.其实就是 ...
- 067 HA与updateStateByKey结合
是HA与updateStateByKey相结合的程序. 有点问题,有点奇怪,重启项目后运行没有问题,但是第三次启动的时候,就不会在打印数据了,有点问题. 1.程序 package com.stream ...
- 065 updateStateByKey的函数API
一:使用场景 1.应用场景 数据的累加 一段时间内的数据的累加 2.说明 每个批次都输出自己批次的数据, 这个时候,可以使用这个API,使得他们之间产生联系. 3.说明2 在累加器的时候,起到的效果和 ...
- SparkStreaming updateStateByKey 保存记录信息
)(_+_) ) 查看是否存在,如果存在直接获取 )) ssc.checkpoint() )) //使用updateStateByKey 来更新状态 val stateDstream = wordDs ...
- Spark Streaming updateStateByKey案例实战和内幕源码解密
本节课程主要分二个部分: 一.Spark Streaming updateStateByKey案例实战二.Spark Streaming updateStateByKey源码解密 第一部分: upda ...
- spark streaming updateStateByKey 用法
object NetworkWordCount { def main(args: Array[String]) { ) { System.err.println("Usage: Networ ...
- spark-streming 中调用spark-sql时过程遇到的问题
在spark-streming 中调用spark-sql时过程遇到的问题 使用版本:spark-2.1.0 JDK1.8 1. spark-sql中对limit 的查询结果使用sum() 聚合操作不生 ...
- 14:Spark Streaming源码解读之State管理之updateStateByKey和mapWithState解密
首先简单解释一下)) //要使用updateStateByKey方法,必须设置Checkpoint. ssc.checkpoint("/checkpoint/") val sock ...
随机推荐
- Tomcat7安装及配置教程
Apache Tomcat7.0安装及配置教程.. Apache Tomcat7.0官方网站链接:http://tomcat.apache.org/ apache-tomcat-7.0.73-wi ...
- 9.19.3 反射和Properties(重要)
dbinfo.properties文件中的内容: driver oracle.jdbc.driver.OracleDriver url=jdbc:oracle:thin:@192.168.1. ...
- Andrew Ng机器学习课程笔记--week6(精度&召回率)
Advice for applying machine learning 本周主要学习如何提升算法效率,以及如何判断学习算法在什么时候表现的很糟糕和如何debug我们的学习算法.为了让学习算法表现更好 ...
- Jquery笔记之第二天
Jquery笔记之第二天 jQuery - 获取内容和属性 获得内容 - text().html() 以及 val() <script> $(document).ready(functio ...
- BeautifulSoup练习第一节
一.pip install beautilfulsoup4 二.主要使用html.parser这个python标准库 三.打印首页博客的时间.打印摘要 # coding:utf-8from bs4 i ...
- Android WebView基本使用
转载请注明出处: http://blog.csdn.net/lowprofile_coding/article/details/77928614 WebView介绍 Android WebView在A ...
- Redis在java中的使用
1.首先安装Redis环境.可以在Windows.linux.别的服务器上搭建Redis环境 2.在java工程中导入必须的jar包 如maven上导入两个jar] <!-- Redis必须包 ...
- select 标签选中 jquery
网上很多错误 的[text ='xxx'] ,我晕. option 标签没有 text 属性.所以[]选取不到. 正确的: $("#yearCardTypeState option:cont ...
- 学习Python Day1
学习PythonDay1,主要是学习了循环,while循环,for循环:while循环加if.else以及elif,for循环嵌套for循环:break,终止循环,continue跳出循环:for i ...
- grunt之clean、copy
心情不太好,正好这部分比较简单,记个流水账. ----------流水很清楚惜花这个责任,真的身份不过送运---------- clean.copy算是很重要也很简单的基本组件了. clean(V0. ...