我想知道当我放入缓存RDD然后通过修改有限数量的值来获取新的RDD时会发生什么。
rdd.cache
val rdd2 = rdd.map(x=>if(cond) partitionValue else x)
如果使用rdd2,RDD中没有触摸的部分仍然在缓存中?
此外,我需要更新分区,其中包含修改后的值,所以我
val rdd2bis = rdd2.partitionBy(HashPartioner(nbPart))
我想为每个数据点迭代这个过程:
partitionBy
将其放在正确的分区中。所以我的主要问题是,如果只有少数成员被修改,partitionBy
是否在内存中保留输出RDD?
我知道partitionBy提供了一个新的RDD作为输出,但是有一些非修改的缓存值仍然存在于生成的RDD的缓存中。
答案 0 :(得分:0)
我想知道当我放入缓存RDD然后通过修改有限数量的值来获取新的RDD时会发生什么。
如果你在字面上修改可变对象,你最终会得到不正确和不确定的编程。
如果使用rdd2,还没有触摸的rdd部分还在缓存中?
如果你map
没有修改现有对象,它根本不会影响缓存数据。 rdd
应该按原样缓存(除非由于内存问题而被驱逐),rdd2
将不会。然而,数据未被复制,因此rdd2
中的“未更改”记录引用与rdd
相同的对象。
如果只有少数成员被修改,partitionBy会在内存中保留输出RDD
没有。 partitionBy
需要标准的shuffle机制。它再次没有真正影响rdd
的缓存状态。