我找到了相似的主题:Understanding Spark's caching
但这仍然不是我的问题。让我们考虑下面的代码片段: 选项a:
rdd1 = sc.textFile()
rdd1.cache()
rdd2 = rdd1.map().partionBy()
rdd3 = rdd1.reduceBy().map()
rdd2.cache()
rdd1.unpersist()
data = rdd2.collect()
选项B:
^{pr2}$我应该选择哪个选项来阻止rdd1
的重新计算?{{cd2>在做第一次操作之前,你可以考虑一下。另一方面,调用unpersist
,就像在optionB中那样,可能导致没有可用空间来缓存rdd2
。请帮我选择我应该使用的选项。在
严格说来,这两种选择都是不正确的。在
第一个,正如您所怀疑的,在实际收集数据之前,删除了缓存标志。在
第二个实际上触发了缓存,但是由于您从不计算}只是持久化的,并且在这之后被丢弃。删除
rdd3
缓存的{rdd1.cache()
实际上应该提高性能。另外,rdd2.cache()
似乎过时了,因为结果永远不会被重用。在如果
textFile
从昂贵的存储中加载数据,则可以这样构造代码:其中
someAction
是要对特定的RDD
执行的操作。在相关问题 更多 >
编程相关推荐