A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

【郑州校区】spark笔记之DStream相关操作
DStream上的操作与RDD的类似,分为Transformations(转换)和Output Operations(输出)两种,此外转换操作中还有一些比较特殊的操作,如:updateStateByKey()、transform()以及各种Window相关的操作。
4.1 Transformations on DStreams
Transformation
Meaning
map(func)
对DStream中的各个元素进行func函数操作,然后返回一个新的DStream
flatMap(func)
与map方法类似,只不过各个输入项可以被输出为零个或多个输出项
filter(func)
过滤出所有函数func返回值为true的DStream元素并返回一个新的DStream
repartition(numPartitions)
增加或减少DStream中的分区数,从而改变DStream的并行度
union(otherStream)
将源DStream和输入参数为otherDStream的元素合并,并返回一个新的DStream.
count()
通过对DStream中的各个RDD中的元素进行计数,然后返回只有一个元素的RDD构成的DStream
reduce(func)
对源DStream中的各个RDD中的元素利用func进行聚合操作,然后返回只有一个元素的RDD构成的新的DStream.
countByValue()
对于元素类型为K的DStream,返回一个元素为(K,Long)键值对形式的新的DStream,Long对应的值为源DStream中各个RDD的key出现的次数
reduceByKey(func, [numTasks])       
利用func函数对源DStream中的key进行聚合操作,然后返回新的(K,V)对构成的DStream
join(otherStream, [numTasks])
输入为(K,V)、(K,W)类型的DStream,返回一个新的(K,(V,W))类型的DStream
cogroup(otherStream, [numTasks])
输入为(K,V)、(K,W)类型的DStream,返回一个新的 (K, Seq[V], Seq[W]) 元组类型的DStream
transform(func)       
通过RDD-to-RDD函数作用于DStream中的各个RDD,可以是任意的RDD操作,从而返回一个新的RDD
updateStateByKey(func)
根据key的之前状态值和key的新值,对key进行更新,返回一个新状态的DStream
特殊的Transformations
1UpdateStateByKey Operation
UpdateStateByKey用于记录历史记录,保存上次的状态
2Window Operations(开窗函数)
滑动窗口转换操作:
滑动窗口转换操作的计算过程如下图所示,我们可以事先设定一个滑动窗口的长度(也就是窗口的持续时间),并且设定滑动窗口的时间间隔(每隔多长时间执行一次计算),然后,就可以让窗口按照指定时间间隔在源DStream上滑动,每次窗口停放的位置上,都会有一部分DStream被框入窗口内,形成一个小段的DStream,这时,就可以启动对这个小段DStream的计算。
(1)红色的矩形就是一个窗口,窗口框住的是一段时间内的数据流。
(2)这里面每一个time都是时间单元,在官方的例子中,每隔window size是3 time unit, 而且每隔2个单位时间,窗口会slide一次。
所以基于窗口的操作,需要指定2个参数:
· window length - The duration of the window (3 in the figure)
· slide interval - The interval at which the window-based operation is performed (2 in the figure).  
a.窗口大小,一段时间内数据的容器。
b.滑动间隔,每隔多久计算一次。
4.2 Output Operations on DStreams
Output Operations可以将DStream的数据输出到外部的数据库或文件系统,当某个Output Operations被调用时(与RDD的Action相同),spark streaming程序才会开始真正的计算过程。
Output Operation
Meaning
print()
打印到控制台
saveAsTextFiles(prefix, [suffix])
保存流的内容为文本文件,文件名为
"prefix-TIME_IN_MS[.suffix]".
saveAsObjectFiles(prefix, [suffix])
保存流的内容为SequenceFile,文件名为
"prefix-TIME_IN_MS[.suffix]".
saveAsHadoopFiles(prefix, [suffix])
保存流的内容为hadoop文件,文件名为
"prefix-TIME_IN_MS[.suffix]".
foreachRDD(func)
对Dstream里面的每个RDD执行func
传智播客·黑马程序员郑州校区地址
河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层
联系电话 0371-56061160/61/62
来校路线  地铁一号线梧桐街站A口出

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马