UpdateStateByKey

使用说明:维护key的状态。

使用注意:使用该算子需要设置checkpoint

使用示例:

object UpdateStateByKeyTest {
def main(args: Array[String]): Unit = { val conf=new SparkConf().setMaster("local[2]").setAppName("UpdateStateByKeyTest") val ssc=new StreamingContext(conf,Seconds(2)); /**
* 数据源
*/
val fileDS=ssc.socketTextStream("hadoop1", 9999)
/**
* 需要设置一个checkpoint的目录
* 因为我们的计算结果有中间状态,这些中间状态需要存储
*/
ssc.checkpoint(".")
val wordDS=fileDS.flatMap { line => line.split("\t") }
.map { word => (word,1) }
/**
* updateFunc: (Seq[Int], Option[S]) => Option[S]
* updateFunc 这是一个匿名函数
* (Seq[Int], Option[S]) 两个参数
*
* 参数一:Seq[Int] Seq代表的是一个集合,int代表的是V的数据类型
* ---分组的操作,key相同的为一组 (hadoop,{1,1,1,1})
* 参数二:Option[S] S代表的是中间状态State的数据类型,S对于我们的这个wordcount例子来讲,应该是
* int类型。中间状态存储的是单词出现的次数。 hadoop -> 4
*
* Option[S] 返回值
*
*/
val wordcountDS=wordDS.updateStateByKey((values:Seq[Int],state:Option[Int]) =>{
val currentCount= values.sum; //获取此次本单词出现的次数
val count=state.getOrElse(0);//获取上一次的结果 也就是中间状态
Some(currentCount+count);
})
wordcountDS.print() ssc.start()
ssc.awaitTermination()
}
}

 

源码描述:

def updateStateByKey[S: ClassTag](
updateFunc: (Seq[V], Option[S]) => Option[S]
): DStream[(K, S)] = ssc.withScope {
updateStateByKey(updateFunc, defaultPartitioner())
}

mapWithStage

使用说明:维护key的状态。updateStateByKey的升级

使用注意:使用该算子需要设置checkpoint

使用示例:

object MapWithStateTest {
def main(args: Array[String]): Unit = { val conf=new SparkConf().setMaster("local[2]").setAppName("MapWithStateDemo") val ssc=new StreamingContext(conf,Seconds());
ssc.checkpoint(".") val fileDS=ssc.socketTextStream("hadoop1", )
val wordDstream =fileDS.flatMap { line => line.split("\t") }
.map { word => (word,) } /**
* word: String, one: Option[Int], state: State[Int]
* 这个函数里面有三个参数
* 第一个参数:word: String 代表的就是key
* 第二个参数:one: Option[Int] 代表的就是value
* 第三个参数:state: State[Int] 代表的就是状态(历史状态,也就是上次的结果)
*
* hello,4
*
* hello,1
*
* hello,5
*/
val mappingFunc = (word: String, one: Option[Int], state: State[Int]) => {
val sum = one.getOrElse() + state.getOption.getOrElse()
val output = (word, sum)
state.update(sum)
output
 } val initialRDD = ssc.sparkContext.parallelize(List(("hello", ), ("world", ))) val stateDstream = wordDstream.mapWithState(
StateSpec.function(mappingFunc).initialState(initialRDD)) stateDstream.print();
ssc.start()
ssc.awaitTermination()
}
}

Spark-Streaming 常用流式计算算子的更多相关文章

  1. Spark streaming + Kafka 流式数据处理,结果存储至MongoDB、Solr、Neo4j(自用)

    KafkaStreaming.scala文件 import kafka.serializer.StringDecoder import org.apache.spark.SparkConf impor ...

  2. spark streaming流式计算---监听器

    随着对spark的了解,有时会觉得spark就像一个宝盒一样时不时会出现一些难以置信的新功能.每一个新功能被挖掘,就可以使开发过程变得更加便利一点.甚至使很多不可能完成或者完成起来比较复杂的操作,变成 ...

  3. spark streaming 流式计算---跨batch连接池共享(JVM共享连接池)

    在流式计算过程中,难免会连接第三方存储平台(redis,mysql...).在操作过程中,大部分情况是在foreachPartition/mapPartition算子中做连接操作.每一个分区只需要连接 ...

  4. Storm:分布式流式计算框架

    Storm是一个分布式的.高容错的实时计算系统.Storm适用的场景: Storm可以用来用来处理源源不断的消息,并将处理之后的结果保存到持久化介质中. 由于Storm的处理组件都是分布式的,而且处理 ...

  5. 流式计算新贵Kafka Stream设计详解--转

    原文地址:https://mp.weixin.qq.com/s?__biz=MzA5NzkxMzg1Nw==&mid=2653162822&idx=1&sn=8c4611436 ...

  6. Others-阿里专家强琦:流式计算的系统设计和实现

    阿里专家强琦:流式计算的系统设计和实现 更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 阿里云数据事业部强琦为大家带来题为“流式计算的系统设计与实现”的演讲,本 ...

  7. 【流处理】Kafka Stream-Spark Streaming-Storm流式计算框架比较选型

    Kafka Stream-Spark Streaming-Storm流式计算框架比较选型 elasticsearch-head Elasticsearch-sql client NLPchina/el ...

  8. Storm简介——实时流式计算介绍

    概念 实时流式计算: 大数据环境下,流式数据将作为一种新型的数据类型,这种数据具有连续性.无限性和瞬时性.是实时数据处理所面向的数据类型,对这种流式数据的实时计算就是实时流式计算. 特征 实时流式计算 ...

  9. Spark Streaming与流处理

    Spark Streaming与流处理 ​ 一.流处理        1.1 静态数据处理        1.2 流处理二.Spark Streaming        2.1 简介        2 ...

随机推荐

  1. selenium入门14 窗口切换

    窗口切换: 当前窗口句柄 current_window_handle 所有的窗口句柄 window_handles 切换窗口 switch_to_window() #coding=utf-8 #切换窗 ...

  2. 页面dom事件防止失效的一种写法

    经常我们写事件是这样的 $('.day').on('click', function () { some(); }); 但是这样在spa模式下经常容易出现页面切换后事件失效的问题, 可以采用这样的写法 ...

  3. 使用Excel管理命令输出

    效果图:(饼状图为后添加) 实现代码:

  4. N76E003---看门狗

    看门狗的设置 比较简单,根据芯片手册上的说明进行设置.值得一提的是设置看门狗的寄存器是保护寄存器,所以在写寄存器的时候要解除保护 void wtd_init(void) { TA=0xAA; TA=0 ...

  5. 物流管理系统(数据库+后台+springMVC+Mybatis+layui)

    数据库:mysql create database WBG_logistics; use WBG_logistics; #1管理员表 create table admin( a_id int prim ...

  6. django ORM单表操作

    1.ORM介绍 ORM是“对象-关系-映射”的简称 映射关系: mysql---------Python 表名----------类名 字段----------属性 表记录--------实例化对象 ...

  7. Leetcode463. Island Perimeter

    题目 给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域. 网格中的格子水平和垂直方向相连(对角线方向不相连).整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表 ...

  8. 3.2.5 Magic Squares 魔板

    3.2.5 Magic Squares 魔板 成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 我们知道魔板的每一个方 ...

  9. 灵光一现的trick

    感觉平时会丢掉好多挺好的trick…… 图论 1.图G,固定S,T.可以将任意一条边加上权值$k(k>0)$,求最大化加权后最短路. 2.图G,固定S,T.可以将任意一条边乘以权值$k(k> ...

  10. LeetCode978. 最长湍流子数组

    问题:978. 最长湍流子数组 当 A 的子数组 A[i], A[i+1], ..., A[j] 满足下列条件时,我们称其为湍流子数组: 若 i <= k < j,当 k 为奇数时, A[ ...