pyt*_*nic 4 scala apache-spark
我使用flatMap制作RDD.稍后我会对它进行范围分区.如果我坚持原始RDD,一切正常.但是,如果我不缓存它,范围分区器部分想要重新计算原始RDD的一部分.我知道如果我没有足够的内存,但在这种情况下,我的系统中的内存比RDD占用的内存多得多.其次,该RDD的计算很长,因此重新启动/重新计算确实会损害性能.这种奇怪行为的原因是什么?
PS我只使用RDD一次.所以,这不应该发生.
这就是Spark的工作原理:
当您持久保存RDD时,每个节点都会存储它在内存中计算的任何分区,并在该数据集(或从中派生的数据集)的其他操作中重用它们.
所以当你不这样做时,事实并非如此.如果您多次使用RDD并且有足够的内存,通常需要保留它.
这不能自动完成,因为Spark无法知道您是否要重用RDD:例如,您可以计算RDD,然后sample使用RDD ,并使用结果来决定是否要对RDD执行其他操作,因此RDD是否被使用两次取决于随机数发生器.