我们正在开发 Spark 框架,其中我们将历史数据移动到 RDD 集中。
基本上,RDD 是不可变的,我们在其上进行操作的只读数据集。基于此,我们将历史数据移动到 RDD 中,并在此类 RDD 上进行过滤/映射等计算。
现在有一个用例,其中 RDD 中的数据子集被更新,我们必须重新计算这些值。
HistoricalData 采用 RDD 的形式。我根据请求范围创建另一个 RDD,并将该 RDD 的引用保存在ScopeCollection中
到目前为止,我已经能够想到以下方法 -
方法1:广播变化:
- 对于每个更改请求,我的服务器都会获取特定于范围的 RDD 并生成一个作业
- 在作业中,在该 RDD 上应用映射阶段 -
2.a。对于 RDD 中的每个节点,在广播中查找并创建一个现在已更新的新值,从而创建一个新的 RDD
2.b。现在我在 step2.a 再次对这个新的 RDD 进行所有计算。像乘法,减少等
2.c。我将此 RDD 引用保存回我的ScopeCollection
方法2:为更新创建一个RDD
- 对于每个更改请求,我的服务器都会获取特定于范围的 RDD 并生成一个作业
- 在每个 RDD 上,与具有更改的新 RDD 进行联接
- 现在我在第 2 步再次对这个新的 RDD 进行所有计算,例如乘法、减法等
方法3:
我曾想过创建流式 RDD,在其中不断更新相同的 RDD 并进行重新计算。但据我了解,它可以从 Flume 或 Kafka 获取流。而在我的情况下,这些值是根据用户交互在应用程序本身中生成的。因此,在我的上下文中,我看不到任何流式 RDD 的集成点。
关于哪种方法更好或适合这种情况的任何其他方法的任何建议。
蒂亚!