我使用 flatMap 制作了一个 RDD。稍后我对其进行范围分区。如果我坚持原来的 RDD,一切正常。但是,如果我不缓存它,范围分区器部分会以某种方式重新计算原始 RDD 的部分。我知道如果我没有足够的内存,但在这种情况下,我的系统中的内存比 RDD 占用的内存多得多。其次,该 RDD 的计算时间很长,因此这种重新启动/重新计算确实会损害性能。这种奇怪行为的原因是什么?

P.S 我只使用 RDD 一次。所以,这不应该发生。

最佳答案

这就是 Spark 的工作原理:



所以当你不这样做时,它不会。如果你多次使用一个 RDD,并且有足够的内存,你通常想要持久化它。

这不能自动完成,因为 Spark 无法知道您是否要重用 RDD:例如您可以计算一个RDD,然后对其进行sample,并根据结果决定是否要对RDD做其他事情,因此RDD是否使用两次取决于随机数生成器。

关于scala - 为什么 spark 不断重新计算 RDD?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40248865/

10-16 06:10