我们正在开发Spark框架,将历史数据转移到RDD集合中。
基本上,RDD是不可变的、只读的数据集,在其上进行操作。基于此,我们已经将历史数据移入RDD,并对这些RDD进行过滤/映射等计算操作。
现在有一个用例,其中RDD中的一部分数据得到更新,我们必须重新计算值。
HistoricalData以RDD形式存在。我根据请求范围创建另一个RDD,并将该RDD的引用保存在ScopeCollection中。
到目前为止,我能够考虑以下方法: 方法1:广播更改:
对于这种情况,有哪种方法更好或其他适合的方法吗?
谢谢!
基本上,RDD是不可变的、只读的数据集,在其上进行操作。基于此,我们已经将历史数据移入RDD,并对这些RDD进行过滤/映射等计算操作。
现在有一个用例,其中RDD中的一部分数据得到更新,我们必须重新计算值。
HistoricalData以RDD形式存在。我根据请求范围创建另一个RDD,并将该RDD的引用保存在ScopeCollection中。
到目前为止,我能够考虑以下方法: 方法1:广播更改:
- 对于每个更改请求,我的服务器获取特定范围的RDD并生成作业。
- 在作业中,在RDD上应用映射阶段 -
2.a.对于RDD中的每个节点,在广播上执行查找并创建一个新值,该新值现在已更新,从而创建一个新的RDD。
2.b.现在我再次在此新RDD(步骤2.a)上执行所有计算,如乘法、缩减等。
2.c.将此RDD引用保存回我的ScopeCollection
- 对于每个更改请求,我的服务器获取特定范围的RDD并生成作业。
- 在每个RDD上,与具有更改的新RDD进行连接。
- 现在我再次在此新RDD(步骤2)上执行所有计算,如乘法、缩减等
对于这种情况,有哪种方法更好或其他适合的方法吗?
谢谢!