Spark Streaming reduceByKeyAndWindow 示例

Alw*_*ull 3 java apache-spark spark-streaming

https://spark.apache.org/docs/latest/streaming-programming-guide.html#window-operations它说reduceByKeyAndWindow“返回一个新的单元素流,通过使用功能"

给出的示例是,如果我们想要每 10 秒生成过去 30 秒数据的字数统计。

我对此感到困惑的部分是它的reduceByKeyAndWindow工作原理。因为一个窗口流是由多个 RDD 组成的。在这种情况下,不reduceByKeyAndWindow只是返回一个 RDD 流而不是一个 RDD?

小智 6

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 个批次。

关于 window 需要记住的一件事是 Spark 在内存中保存整个窗口。在第一个窗口中,它将使用联合运算符将 RDD A 与 F 组合起来,以创建一个大 RDD。它将占用 6 倍的内存,如果那是您所需要的,那就没问题了。因此,在将数据统一到一个 rdd 后,在逐个窗口的 ereduce key 中,它会按 key 应用 reduce,并在每个滑动间隔返回 dstream。