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. jquery中$.ajax()方法使用详解

    1.url 说明:发送请求的地址(默认为当前页面),要求是String类型的参数,比如是.net下,"~wexin(控制器)/getweinxinmenu(动作)", 2.type ...

  2. 西门子 SINAMICS S120 Web server 用户名和默认密码

    sinamics web server可以通过浏览器查看驱动器故障等信息,是一个比较方便的辅助工具. 1. 一般用户 SINAMICS 密码 无 2. 管理员 Administrator 密码 Adm ...

  3. php之判断点在多边形内的api

    1.判断点在多边形内的数学思想:以那个点为顶点,作任意单向射线,如果它与多边形交点个数为奇数个,那么那个点在多边形内,相关公式: <?php class AreaApi{ //$area是一个多 ...

  4. 触发transition的几种方式--转

    鼠标单击 获取焦点 或元素发生任何改变,怎么说呢,目前的理解是,元素发生了什么改变,使得它跟以前不一样了.比如同样是p元素,先有一个样式.后来这个p被hover了.被focus了.或者通过另外一条途径 ...

  5. Firefox浏览器 页面滑动卡帧问题

    在设置里关闭"平滑滚动"选项即可,猎豹似乎没有,遭黑

  6. IOS 控制当前控制器支持哪些方向

    #pragma mark - 实现这个方法来控制屏幕方向 /** * 控制当前控制器支持哪些方向 * 返回值是UIInterfaceOrientationMask* */ - (NSUInteger) ...

  7. HDU(1016),打素数环

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016 哈哈,状态来了就是不一样,很快就A了. 注意的位置是,最后一个点,要与第一个点比较. #incl ...

  8. 在vue中使用插槽 slot

    插槽(slot)这个概念非常重要 插槽的使用场景1:在子组件里面显示父组件的dom <div id='root'> <child content = '<p>Dell&l ...

  9. Java从入门到放弃——04.数组

    本文目标 数组 1.数组 定义一个数组的三个姿势: 数组类型 []    数组名  =   new   数组类型[数组数量]: 数组类型 []    数组名  =   new   数组类型[]{对象1 ...

  10. jenkins 执行shell命令出错command not found 和No such file or directory

    [root@localhost usr]# sh test.sh command not found -bash: cd: usr: No such file or directory 这里碰到了一个 ...