Spark 中的 RDD 持久化

RDD Persistence in Spark

我有一个关于 RDD 何时存储在内存中的问题。 假设我有这段代码:

val dataset = originalDataset
  .flatMap(data => modifyDatasetFormat(data, mappingsInMap))
  .persist(StorageLevel.MEMORY_AND_DISK)    

到目前为止,我有一个 RDD 存储在每个工作节点的内存中。

问题: 如果我对这个 RDD 进行另一个转换或操作,这个持久性是否会停止存在,我应该创建另一个或者它与它没有任何关系?

如果我更改此 RDD 中的分区(e.x 散列分区),这种持久性是否会停止存在,我应该创建另一个,或者它与它没有任何关系?

谢谢

If i do another transformation or action to this rdd, will this persistance stop exist

没有

If i change partitions in this rdd (e.x hash partitions) will this persistance stop exist

没有

转换(包括重新分区)无法更改现有的 RDD,尤其是它们无法取消持久化。当然

  1. 转换的结果本身不会持久化;

  2. (不正确,正如 Jem Tucker 的评论中指出的那样)您需要转换持久化 RDD,而不是您调用 persist 的那个。

    val dataset1 = originalDataset.
      flatMap(data => modifyDatasetFormat(data, mappingsInMap))
    dataset1.persist(StorageLevel.MEMORY_AND_DISK)
    val dataset3 = dataset1.map(...)
    

    将重新计算 dataset1。相反,你需要

    val dataset2 = dataset1.persist(StorageLevel.MEMORY_AND_DISK)
    val dataset3 = dataset2.map(...)