16.1 无状态转换操作
无状态转化操作就是把简单的RDD转化操作应用到每个批次上,也就是转化DStream
中的每一个RDD
。部分无状态转化操作列在了下表中。
需要记住的是,尽管这些函数看起来像作用在整个流上一样,但事实上每个DStream
在内部是由许多RDD
(批次)组成,且无状态转化操作是分别应用到每个RDD
上的。例如,reduceByKey()
会化简每个时间区间中的数据,但不会化简不同区间之间的数据。
举个例子,在之前的wordcount程序中,我们只会统计几秒内接收到的数据的单词个数,而不会累加。
无状态转化操作也能在多个DStream
间整合数据,不过也是在各个时间区间内。例如,键值对DStream
拥有和RDD
一样的与连接相关的转化操作,也就是cogroup()、join()、leftOuterJoin()
等。我们可以在DStream
上使用这些操作,这样就对每个批次分别执行了对应的RDD操作。
我们还可以像在常规的 Spark 中一样使用 DStream
的union()
操作将它和另一个DStream
的内容合并起来,也可以使用StreamingContext.union()
来合并多个流。