如何保持RDD持久且一致?

时间:2018-08-26 18:30:49

标签: scala apache-spark

我有以下代码(简化复杂情况):

val newRDD = prevRDD.flatMap{a =>
    Array.fill[Int](scala.util.Random.nextInt(10)){scala.util.Random.nextInt(2)})
}.persist()
val a = newRDD.count
val b = newRDD.count

,即使应该保留的RDD(因此是一致的),在大多数情况下,ab也不相同。

是否有办法使第一个动作的结果保持一致,所以当第二个“动作”被调用时,第一个动作的结果将被返回?

*编辑*

我的问题显然是由zipWithIndex方法引起的,该问题存在于我的代码中-该代码创建的索引高于计数。我会在另一个线程中问这个问题。谢谢

1 个答案:

答案 0 :(得分:1)

无法确保100%一致。

调用persist时,它将尝试将所有分区缓存在内存中(如果适合)。 否则,它将重新计算内存不足的分区。