Scala 如何保持RDD的持久性和一致性?

Scala 如何保持RDD的持久性和一致性?,scala,apache-spark,Scala,Apache Spark,我有以下代码(针对复杂情况的简化): 即使RDD应该被持久化(因此是一致的),a和b在大多数情况下也不相同 是否有办法保持第一个操作的结果一致,以便在调用第二个“操作”时,返回第一个操作的结果 *编辑* 我的问题显然是由我的代码中存在的zipWithIndex方法引起的,它创建的索引高于计数。我将用另一种方式询问此事。谢谢没有办法确保100%一致 当您调用persist时,如果合适,它将尝试缓存内存中的所有分区。 否则,它将重新计算不适合内存的分区。我无法重现这个问题,a和b在我的测试中是相同的

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

即使RDD应该被持久化(因此是一致的),
a
b
在大多数情况下也不相同

是否有办法保持第一个操作的结果一致,以便在调用第二个“操作”时,返回第一个操作的结果

*编辑*


我的问题显然是由我的代码中存在的
zipWithIndex
方法引起的,它创建的索引高于计数。我将用另一种方式询问此事。谢谢

没有办法确保100%一致

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

我无法重现这个问题,a和b在我的测试中是相同的,因为RDD被持久化了,所以应该是一致的。a和b都应该有相同的值。我想你正在尝试做一些其他的操作。请提供你的详细代码,这就是我所想的,这很有意义。它是否也会发生在rdd中的
zipWithIndex
(或数据帧中的
row_number
)-这样以后的调用将不同于以前的调用(因此我不能指望“id”列保持一致)?这取决于您的代码和逻辑。假设您的
preverdd
是不可变的(例如:它从静态-未更改的文件加载数据),在您的情况下,计数值
a
b
将是相同的。但由于您的数据是从
flatMap
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