DStream的transformation操作概览
一.Spark Streaming开发步骤
- 创建输入DStream,如将Flume、Kafka、HDFS和Socket等作为数据源
- 对输入DStream进行转换操作
- 对转换后的DStream进行输出操作,比如存储到DBMS中
二.DStream分类
- Input DStream,是最原始最初的DStream,它是依据不同的数据源创建的,也是RDD最初诞生的地方
- Transformed DStream,是由其他DStream通过transformation算子转换而来的DStream
- Output DStream,是由其他DStream通过Output算子生成,它只存在于Output算子内部,并不会像Transformed DStream一样由算子返回,它是触发Job执行的关键
三.常用Transformation算子
算子 | 描述 |
map(func) | 源DStream的每个元素通过函数func返回一个新的DStream |
flatMap(func) | 类似于map操作,不同的是每个输入元素可以被映射出0或者更多的输出元素。 |
filter(func) | 在源DStream上选择Func函数返回仅为true的元素,最终返回一个新的DStream。 |
repartition(numPartitions) | 通过输入的参数numPartitions的值来改变DStream的分区大小。 |
union(otherStream) | 返回一个包含源DStream不其他DStream的元素合并后的新DStream。 |
count() | 对源DStream内部的所含有的RDD的元素数量进行计数,返回一个内部的RDD只包含一个元素的DStreaam。 |
reduce(func) | 使用函数func(有两个参数并返回一个结果)将源DStream中每个RDD的元素进行聚合操作,返回一个内部所包含的RDD只有一个元素的新DStream。 |
countByValue() | 计算DStream中每个RDD内的元素出现的频次并返回新的DStream[(K,Long)],其中K是RDD中元素的类型, Long是元素出现的频次。 |
reduceByKey(func, [numTasks]) | 当一个类型为( K, V)键值对的DStream被调用的时候,返回类型为类型为( K, V)键值对的新DStream,其中每个键的值V都是使用聚合函数func汇总。注意:默认情况下,使用Spark的默认并行度提交任务(本地模式下并行度为2,集群模式下为8),可以通过配置numTasks设置丌同的并行任务数。 |
join(otherStream, [numTasks]) | 当被调用类型分别为( K, V)和( K, W)键值对的2个DStream时,返回类型为( K,( V, W))键值对的一个新DStream。 |
cogroup(otherStream, [numTasks]) |
当被调用的两个DStream分别含有(K, V) 和(K, W)键值对时,返回一个(K, Seq[V], Seq[W])类型的新的DStream。 |
transform(func) | 通过对源DStream的每个RDD应用RDD-to-RDD函数返回一个新的DStream,这可以用来在DStream做任意RDD操作。 |
updateStateByKey(func) | 返回一个新状态的DStream,其中每个键的状态是根据键的前一个状态和键的新值应用给定函数func后的更新。这个方法可以被用来维持每个键的任何状态数据。 |
window(func) | 对滑动窗口的数据执行操作。 |