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被缓存吗?说我要同时缓存rdd3和rdd4,我需要分别缓存它们?
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如何工作所做出的某些选择背后的想法.
| 归档时间: |
|
| 查看次数: |
6229 次 |
| 最近记录: |