从https://spark.apache.org/docs/latest/streaming-programming-guide.html#window-operations它说reduceByKeyAndWindow
“返回一个新的单元素流,通过使用func”滑动间隔聚合流中的元素而创建“
给出的例子是我们是否希望在最后30秒的数据中每隔10秒生成字数。
我对此感到困惑的部分是reduceByKeyAndWindow
的确如何运作。因为窗口流由多个RDD组成。在这种情况下,reduceByKeyAndWindow
不会只返回一个RDD流而不是一个RDD?
答案 0 :(得分:2)
Spark Streaming是一个基于微量分析的流媒体库。这意味着流数据基于称为批处理间隔的时间片被分成批处理。每个批次都转换为RDD,这个连续的RDD流表示为DStream。
有时我们需要知道每m秒最后n秒发生的事情。举一个简单的例子,假设批处理间隔为10秒,我们需要知道每30秒最后60秒发生了什么。这里60秒称为窗口长度和30秒滑动间隔。让我们说前6批是A,B,C,D,E,F,它们是第一个窗口的一部分。 30秒后,将形成第二窗口,其将具有D,E,F,G,H,I。如您所见,第一个和第二个窗口之间共有3个批次。
关于窗口要记住的一件事是Spark在内存中占据了整个窗口。在第一个窗口中,它将使用union运算符将RDD A与F组合以创建一个大RDD。这将需要6倍的内存,如果你需要的话就可以了。所以在窗口的ereduce键中,一旦它将数据输入到一个rdd,它就会应用reduce by键并在每个滑动间隔返回dstream。