Spark cache和unpersist ord

2024-09-28 17:23:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我找到了相似的主题: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。请帮我选择我应该使用的选项。在


Tags: 代码mapcache主题选项cachingsparksc
1条回答
网友
1楼 · 发布于 2024-09-28 17:23:59

严格说来,这两种选择都是不正确的。在

第一个,正如您所怀疑的,在实际收集数据之前,删除了缓存标志。在

第二个实际上触发了缓存,但是由于您从不计算rdd3缓存的{}只是持久化的,并且在这之后被丢弃。删除rdd1.cache()实际上应该提高性能。另外,rdd2.cache()似乎过时了,因为结果永远不会被重用。在

如果textFile从昂贵的存储中加载数据,则可以这样构造代码:

rdd1 = sc.textFile(...)
rdd1.cache()

rdd2 = rdd1.map(...).partionBy(...)
rdd3 = rdd1.reduceByKey(...).map(...)

rdd2.someAction()
rdd3.someAction()

rdd1.unpersist()

其中someAction是要对特定的RDD执行的操作。在

相关问题 更多 >