实时流数据聚合

Aggregations on Realtime Streaming data

谁能解释一下如何使用 storm、spark 等大数据技术对实时流数据进行聚合。 在流数据上计算是没有意义的,因为数据一直在流动

在流中,数据首先要流continuously.So,我们需要积累数据。为此,我们使用 window。我们首先按 window 对数据进行分组,其中我们指定时间列和时间。 Spark 将累积给定时间的数据,然后我们将对分组数据应用聚合。 例如

import spark.implicits._

val words = ... // streaming DataFrame of schema { timestamp: Timestamp, word: String }

// Group the data by window and word and compute the count of each group
val windowedCounts = words.groupBy(
  window($"timestamp", "10 seconds"),
  $"word"
).count()

完整理解流聚合refer

大多数流式框架支持 'window',它在 window 中收集元组(事件)并将其呈现以进行聚合。翻滚window和滑动window被广泛支持,window的单位是计数(元组)和时间。

您可以参考以下链接以了解 window 的概念:

https://www.oreilly.com/ideas/the-world-beyond-batch-streaming-101 https://www.oreilly.com/ideas/the-world-beyond-batch-streaming-102

您可以通过 windowing 计算最近 N 分钟(可能是秒、小时左右)的元组聚合。您可能会觉得操作是批处理,是的,您也可以通过将元组推送到外部存储并使用批处理框架进行一些聚合来实现。

通常情况下,批处理框架中的聚合会更有效(聚合操作是面向批处理的),但动态流框架上的聚合不需要外部存储(如果 window 适合内存) 并且不需要额外的批处理框架。