Spark RDD缓存会走多远?

Edw*_*Guo 13 distributed-computing apache-spark

假设我在rdd1上调用了三个RDD转换函数:

def rdd2 = rdd1.f1
def rdd3 = rdd2.f2
def rdd4 = rdd3.f3
Run Code Online (Sandbox Code Playgroud)

现在我想缓存rdd4,所以我打电话rdd4.cache().

我的问题:

只有rdd4缓存操作的结果或者上面的每个RDD都会rdd4被缓存吗?说我要同时缓存rdd3rdd4,我需要分别缓存它们?

aar*_*man 21

缓存的整个想法是,除非你告诉它,否则spark不会将结果保存在内存中.因此,如果您在链中缓存最后一个RDD,它只会将该结果保存在内存中.所以,是的,您确实需要单独缓存它们,但请记住,如果要多次使用它,只需要缓存RDD,例如:

rdd4.cache()
val v1 = rdd4.lookup("key1")
val v2 = rdd4.lookup("key2")
Run Code Online (Sandbox Code Playgroud)

如果在这种情况下不调用缓存,则每次调用查询(或任何其他需要评估的函数)都会重新计算rdd4.您可能希望阅读有关RDD的论文,它很容易理解,并解释了他们就RDD如何工作所做出的某些选择背后的想法.