- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
State管理之updateStateByKey和mapWithState解密
背景:
整个Spark Streaming是按照Batch Duractions划分Job的。但是很多时候我们需要算过去的一天甚至一周的数据,这个时候不可避免的要进行状态管理,而Spark Streaming每个Batch Duractions都会产生一个Job,Job里面都是RDD,所以此时面临的问题就是怎么对状态进行维护?这个时候就需要借助updateStateByKey和mapWithState方法完成核心的步骤。
源码分析:
1. 无论是updateStateByKey还是mapWithState方法在DStream中均没有,但是是通过隐身转换函数实现其功能。
object DStream {
// `toPairDStreamFunctions` was in SparkContext before 1.3 and users had to
// `import StreamingContext._` to enable it. Now we move it here to make the compiler find
// it automatically. However, we still keep the old function in StreamingContext for backward
// compatibility and forward to the following function directly.
implicit def toPairDStreamFunctions[K, V](stream: DStream[(K, V)])
(implicit kt: ClassTag[K], vt: ClassTag[V], ord: Ordering[K] = null):
PairDStreamFunctions[K, V] = {
new PairDStreamFunctions[K, V](stream)
}
updateStateByKey:
1. 在PairDStreamFunctions中updateStateByKey具体实现如下:
在已有的历史基础上,updateFunc对历史数据进行更新。该函数的返回值是DStream类型的。
/**
* Return a new state DStream where the state for each key is updated by applying
* the given function on the previous state of the key and the new values of each key.
* Hash partitioning is used to generate the RDDs with Sparks default number of partitions.
* @param updateFunc State update function. If `this` function returns None, then
* corresponding state key-value pair will be eliminated.
* @tparam S State type
*/
def updateStateByKey[S: ClassTag](
updateFunc: (Seq[V], Option[S]) = Option[S]
): DStream[(K, S)] = ssc.withScope {
// defaultPartitioner
updateStateByKey(updateFunc, defaultPartitioner())
}
2. defaultPartitioner:
private[streaming] def defaultPartitioner(numPartitions: Int = self.ssc.sc.defaultParallelism) = {
new HashPartitioner(numPartitions)
3. partitioner就是控制RDD的每个patition
/**
* Return a new state DStream where the state for each key is updated by applying
* the given function on the previ
您可能关注的文档
- SolitaireAB支架的应用.ppt
- 水力学第6章 管道-2013.ppt
- 水平一体育课教案.doc
- SPC系统操作手册.ppt
- SL634水利水电工程单元工程施工质量验收评定标准堤防工程.ppt
- 水平运动物体偏转.ppt
- 水化学超详细PPT解说.ppt
- SPP使用指导书.docx
- Spring课堂笔记.doc
- 水库除险加固技术.doc
- 2026年柳州市红岩路幼儿园招聘幼儿教师备考题库及答案详解1套.docx
- 2026年深圳市南山区教育科学研究院附属学校教育集团松坪学校小学部教师招聘备考题库及1套完整答案详解.docx
- 2026年格尔木投资控股有限公司招聘备考题库完整答案详解.docx
- 2026年江西省水务集团有限公司技术部副部长招聘备考题库及参考答案详解.docx
- 2026年江苏省生态学会招聘专职秘书(劳务派遣制)备考题库及1套参考答案详解.docx
- 2026年武义县民政局招聘备考题库及参考答案详解.docx
- 2026年成华区人社局公开招聘1名编外人员备考题库及答案详解一套.docx
- 2023年江永县辅警招聘考试真题最新.docx
- 2026年北京市中关村中学招聘备考题库及参考答案详解1套.docx
- 2024年南昌县辅警招聘考试真题必考题.docx
原创力文档


文档评论(0)