从https://spark.apache.org/docs/latest/streaming-programming-guide.html#window-operations中说,reduceByKeyAndWindow
“返回新的单元素流,该流是通过使用以下间隔将流中的元素聚合在一起而创建的func”
给出的示例是,如果我们想在数据的最后30秒(每10秒)中生成单词计数。
我对此感到困惑的部分是确切的reduceByKeyAndWindow
工作方式。因为窗口流由多个RDD组成。在这种情况下,会不会reduceByKeyAndWindow
只返回一组RDD而不是一个RDD?
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保留了内存中的整个窗口。在第一个窗口中,它将使用联合运算符将RDD A到F组合起来以创建一个大的RDD。这将需要6倍的内存,如果您需要的话就可以了。因此,在按窗口ereduce键时,一旦将数据取消存储到rdd,它将应用reduce by键并在每个滑动间隔返回dstream。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句