带聚合的火花流

Posted

技术标签:

【中文标题】带聚合的火花流【英文标题】:spark streaming with aggregation 【发布时间】:2016-05-05 19:42:50 【问题描述】:

我试图从聚合原则的角度来理解火花流。 Spark DF 基于小批量,计算是在特定时间窗口内的小批量上完成的。

假设我们有数据进来 -

    Window_period_1[Data1, Data2, Data3]
    Window_period_2[Data4, Data5, Data6] 

..

然后首先对 Window_period_1 进行计算,然后对 Window_period_2 进行计算。如果我需要使用新的传入数据和历史数据,让我们说 Window_period_new 和 Window_period_1 和 Window_period_2 的数据之间的 groupby 函数,我该怎么做?

如果我有一个已经创建了一些数据框的要求,那么可以说另一种查看相同内容的方式 -

df1、df2、df3 我需要运行一个聚合,该聚合将涉及来自 df1、df2、df3 和 Window_period_1、Window_period_2,以及所有新传入的流数据

我该怎么做?

【问题讨论】:

【参考方案1】:

Spark 允许您将状态存储在 rdd(带有检查点)中。因此,即使重启后,作业也会从检查点恢复状态并继续流式传输。

但是,我们面临着检查点的性能问题(特别是在恢复状态之后),因此值得使用一些外部源(如 hbase)来实现 storint 状态

【讨论】:

为了支持 Natalia 的回答,有许多数据存储可以连接到 spark 或与 spark 集成,并且可以存储聚合状态(如果检查点无法正常工作)。 Hbase 就是其中之一。还有SnappyData、Cassandra、redis 和MemSQL 等等。各有利弊。

以上是关于带聚合的火花流的主要内容,如果未能解决你的问题,请参考以下文章

火花流功能火花提交时间通过异常

在火花数据框中聚合期间过滤数组值

如何在火花聚合函数中实现scala类型安全

火花流不工作

聚合火花数据框中的多列(所有组合)

根据scala中的条件对列进行火花数据框聚合