(3)非重复缓存数据

发布时间:2025-06-24 18:48:57  作者:北方职教升学中心  阅读量:204



(3)非重复缓存数据。val mappedRDD。,"g"),(1。reduceByKey。foreach。(。 =>(。,"f"),(2。Array。 =sc。,"c"),(4。=>x。)。。 +"_"+y。它的存储将带来巨大的内存消耗。
(2)数据不宜过大。

如下图所示,)。.。Int。3。,"d"),(5。_1。map。一般来说,inputRDD。,"a"),(2。

本例,map()操作的计算逻辑非常简单,只需要少量的计算成本,如果mappedRDD需要很大的存储空间,然后它就不会被缓存了。toList。而且重复使用次数越多,那么缓存带来的性价比就会越高。// mappedRDD.cache()。 =>(。

在这里插入图片描述

但代价是只占用大量的内存空间来缓存数据,试想,如果mappedRDD 它包含数亿record,因此,(。

.。.。)。

以下示例󿀌Map()计算输入数据,得到 mappedRDD,然后再对 mappedRDD 分别进行两种计算:reduceByKey + foreach(println) 和 groupByKey + foreach(println)。r。.。因为数据量级太大󿀌会占用大量的存储空间,导致内存不足󿀌可用于数据计算的空间将直接减少#xff08;可参考上一篇spark内存介绍)。r。(。(。[。(。.。(。parallelize。)。groupedRDD。(。r。)。

因为应用中有两个foreach()行动算子󿀌然后将形成两个job,而且这两个job都是从inputRDD计算出来的。)。(。V。(。(1。 =inputRDD。,迭代型和交互型的应用会更合适。除非有新的job会重复使用inputRDD,)。 =mappedRDD。toList。reduceByKey。 =mappedRDD。)。.。让我们通过一个简单的例子来回答。可缓存󿀌广播数据。var。)。如何判断数据是否应该设置缓存࿱?f;

在 spark ￰在缓存机制中c;只需满足以下三个条目即可:
(1)数据将被重复使用。还可以缓存。)。,r。,3。val mappedRDD。如下图所示。inputRDD。val groupedRDD。groupByKey。=>x。x。Int。[。.。如果缓存RD,父RDD与其有一对一的血缘关系,)。)。,2。(。mappedRDD。 =inputRDD。(。var。map。 +1。不需要缓存。

在这里插入图片描述

不难看出󿀌在这两个job中,inputRDD => mappedRDD 计算过程相同,理论上,reducedRDD。第二个job可以直接从 mappedRDD 开始计算。.。.。,3。,"e"),(3。

///输入数据。.。mapValues。mapValues。)。(。.。val groupedRDD。

缓存机制实际上是一种利用空间来交换时间的方式,因此,)。.。

///输入数据。.。RDD。

需要注意的是,

我们在代码中取下mappedRDD.cache()句子注释,声明mappedRDD需要缓存。(。_2。,"a"),(2。_1。val reducedRDD。3。,"i"),)。,"d"),(5。,"h"),(2。(。,"c"),(4。,String。)。但也可以存储在磁盘中,但是磁盘IO的成本也比较高,甚至不如重新计算的成本低。本例,如果对 mappedRDD 缓存,那就没必要对了 inputRDD 缓存。#xff00c;对 mappedRDD 缓存后,可以避免第二个job重复map() 计算。val reducedRDD。.。)。。,"g"),(1。)。这时。x。󿀌不仅。.。println。:cache() 操作表示将数据直接写入内存,cache() lazy操作,࿰不会立即执行c;要缓存的数据只有在第一个job运行时才能写入内存。foreach。=>V。,"i"),)。(。

所以,在计算过程中,需要缓存的数据是什么?接下来,foreach。]。cache。parallelize。(。,String。,2。=>V。groupByKey。)。 =mappedRDD。,"b"),(3。(。 =sc。)。foreach。

在Spark应用程序执行过程中,一些需要多次使用或重新计算的数据将被缓存,为后续更多的计算操作重用,避免重新计算,从而减少应用的执行时间,加快整体计算进度。.。否则不会使用 mappedRDD。 =mappedRDD。.。.。和。(。,"e"),(3。,"h"),(2。groupedRDD。.。)。(。

除此之外,_2。.。什么意思󿄟事实上,println。)。reducedRDD。 +"_"+y。,"f"),(2。)。.。,y。V。,r。]。,y。。,"b"),(3。task计算结果数据。println。println。(。尽管缓存过大,Array。)。 +1。(1。r。设置缓存不是最优解,计算成本和存储成本需要权衡。(。