我的 RDD 自己改变了他的价值观
My RDD change his values himself
我有一个基本的 RDD[Object],我使用 nextGaussian 和 nextDouble scala 函数在对象值上应用带有哈希函数的映射。当我打印值时,每次打印都会发生变化
def hashmin(x:Data_Object, w:Double) = {
val x1 = x.get_vector.toArray
var a1 = Array(0.0).tail
val b = Random.nextDouble * w
for( ind <- 0 to x1.size-1) {
val nG = Random.nextGaussian
a1 = a1 :+ nG
}
var sum = 0.0
for( ind <- 0 to x1.size-1) {
sum = sum + (x1(ind)*a1(ind))
}
val hash_val = (sum+b)/w
val hash_val1 = (x.get_id,hash_val)
hash_val1
}
val w = 8
val rddhash = parsedData.map(x => hashmin(x,w))
rddhash.foreach(println)
rddhash.foreach(println)
我不明白为什么。提前谢谢你。
RDDs 只是一个 "pointer" 到数据 + 应用到它的操作。动作通过执行 RDD 沿袭具体化这些操作。
因此,RDD 基本上是在请求操作时重新计算的。在这种情况下,每次调用 foreach
操作时都会评估调用 hashmin
的映射函数。
选项很少:
缓存 RDD - 这将导致沿袭被破坏,第一次转换的结果将被保留:
val rddhash = parsedData.map(x => hashmin(x,w)).cache()
为你的随机函数使用一个种子,这样每次生成的伪随机序列都是相同的。
RDD 是惰性的——它们是在使用时计算的。因此,每次调用 foreach
.
时,都会再次调用 Random.nextGaussian
如果你想保持固定值,你可以使用persist()
来存储一个RDD。
我有一个基本的 RDD[Object],我使用 nextGaussian 和 nextDouble scala 函数在对象值上应用带有哈希函数的映射。当我打印值时,每次打印都会发生变化
def hashmin(x:Data_Object, w:Double) = {
val x1 = x.get_vector.toArray
var a1 = Array(0.0).tail
val b = Random.nextDouble * w
for( ind <- 0 to x1.size-1) {
val nG = Random.nextGaussian
a1 = a1 :+ nG
}
var sum = 0.0
for( ind <- 0 to x1.size-1) {
sum = sum + (x1(ind)*a1(ind))
}
val hash_val = (sum+b)/w
val hash_val1 = (x.get_id,hash_val)
hash_val1
}
val w = 8
val rddhash = parsedData.map(x => hashmin(x,w))
rddhash.foreach(println)
rddhash.foreach(println)
我不明白为什么。提前谢谢你。
RDDs 只是一个 "pointer" 到数据 + 应用到它的操作。动作通过执行 RDD 沿袭具体化这些操作。
因此,RDD 基本上是在请求操作时重新计算的。在这种情况下,每次调用 foreach
操作时都会评估调用 hashmin
的映射函数。
选项很少:
缓存 RDD - 这将导致沿袭被破坏,第一次转换的结果将被保留:
val rddhash = parsedData.map(x => hashmin(x,w)).cache()
为你的随机函数使用一个种子,这样每次生成的伪随机序列都是相同的。
RDD 是惰性的——它们是在使用时计算的。因此,每次调用 foreach
.
Random.nextGaussian
如果你想保持固定值,你可以使用persist()
来存储一个RDD。