我对Spark有一点经验。但是,我第一次学习Spark流媒体并发现它很难理解。它很难理解应用程序的流程。例如,对于以下站点上给出的示例
http://ampcamp.berkeley.edu/3/exercises/realtime-processing-with-spark-streaming.html
第3部分的代码。进一步练习,我们有
val words = statuses.flatMap(status => status.split(" "))
val hashtags = words.filter(word => word.startsWith("#"))
val counts = hashtags.map(tag => (tag, 1))
.reduceByKeyAndWindow(_ + _, _ - _, Seconds(60 * 5), Seconds(1))
据说,它计算过去5分钟内最受欢迎的推特哈希标签。那么,这是如何工作的。是否有某种隐藏的循环在每5分钟后执行一次?每秒或5分钟后,words
和hashtags
中的值是?这里发生了什么?我迷路了,请帮帮忙。
答案 0 :(得分:1)
您可以将DStream
视为RDD[RDD[T]]
。每隔五分钟,将使用在过去5分钟内收集的所有数据来实例化新的RDD
。然后,您就可以像处理任何RDD
一样处理此RDD
。您有一些其他方法可以让您通过 windows 计算结果(每个窗口包含有限数量的RDD
s)。将转换应用于DStream
时,转换将应用于所有子RDD
。
以下是将map
应用于DStream
时会发生什么的示例。
val stream: DStream
\
RDD -- RDD -- RDD
stream.map
\
RDD.map -- RDD.map -- RDD.map