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. 简单的NLog配置文件

    NLog.config <?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="h ...

  2. Javascript作业—数字转化为大写

    开始学javascript,写作业. <script type="text/javascript"> function toChinese(money){ var ch ...

  3. redis网络模型

    多路IO复用-非阻塞同步IO模型.见http://www.cnblogs.com/syyong/p/6231326.html 具体结构:http://blog.jobbole.com/100079/ ...

  4. IOS 拼接按钮文字

    NSMutableString *tempAnswerTitle=[[NSMutableString alloc]init]; for(UIButton *answerBtn in self.answ ...

  5. MHA启动及关闭

    MHA启动及关闭 #masterha_manager --global_conf=/etc/masterha/masterha_default.conf --conf=/etc/masterha/ap ...

  6. OpenCV2马拉松第5圈——线性滤波

    收入囊中 这里的非常多内容事实上在我的Computer Vision: Algorithms and ApplicationsのImage processing中都有讲过 相关和卷积工作原理 边界处理 ...

  7. 2017.10.18 微机原理与接口----汇编语言语法和DOS功能调用

    4.1 汇编语言中的基本数据 ·标识符 ·常数 ·变量具有三个属性: (1)段地址(SEG):变量所在段的段地址 (2)偏移地址(OFFSET):变量所在段内的偏移地址 (3)类型(TYPE):每个变 ...

  8. jdk8环境变量 jdk8图解安装 java8安装

    JDK8 是JDK的最新版本,加入了很多新特性,如果我们要使用,需要下载安装: JDK8在windows xp下安装有点问题,所以在WIN7下安装 WIN7操作系统有32位和64位,分别要下载对应的J ...

  9. JS将unicode码转中文方法

    原理,将unicode的 \u 先转为 %u,然后使用unescape方法转换为中文. ? 1 2 3 4 <script type="text/javascript"> ...

  10. 面试-Spring理解

    转自http://hui.sohu.com/infonews/article/6331404387079946240 spring呢,是pivotal公司维护的一系列开源工具的总称,最为人所知的是sp ...