实时流数据的聚合

时间:2017-09-28 00:17:59

标签: apache-spark bigdata apache-storm

有人可以解释如何使用风暴,火花等大数据技术对实时流数据执行聚合。 计算蒸汽数据是没有意义的,因为数据一直在流动

2 个答案:

答案 0 :(得分:0)

在流媒体中,数据将不断流动。首先,我们需要累积数据。为此,我们使用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

答案 1 :(得分:0)

大多数流式传输框架都支持“窗口”,它在窗口中收集元组(事件)并将其呈现为聚合。翻滚窗口和滑动窗口得到广泛支持,窗口单位是计数(元组)和时间。

您可以参考以下链接,了解窗口的概念:

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

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

通常,批处理框架中的聚合将更有效地工作(聚合操作是面向批处理的),但是动态聚合流式处理框架不需要外部存储(如果窗口适合内存),也不需要需要额外的批处理框架才能这样做。