我想在Spark中生成規範爲1的隨機向量。由於矢量可能非常大,我希望它是分佈式的,並且由於RDD中的數據沒有順序,因此我想以RDD [(Int,Double)]的形式存儲矢量,因爲我也是需要使用這個向量來做一些矩陣向量乘法。如何在Spark中生成隨機向量
那麼我怎麼能生成這種矢量?
這是我的計劃,現在:
val v = normalRDD(sc, n, NUM_NODE)
val mod = GetMod(v) // Get the modularity of v
val res = v.map(x => x/mod)
val arr:Array[Double] = res.toArray()
var tuples = new List[(Int, Double)]()
for (i <- 0 to (arr.length - 1)) {
tuples = (i, arr(i)) :: tuples
}
// Get the entries and length of the vector.
entries = sc.parallelize(tuples)
length = arr.length
我認爲這還不夠優雅,因爲它會經過一個「分散 - >單節點 - >分佈」的過程。
有沒有更好的辦法?謝謝:d
你想要一個隨機的rdd,其規範是1還是正態分佈的rdd? – jtitusj
@JohnTitusJungao我想我只是想要一個隨機rdd,其規範是1.正常分佈是好的根據我的代碼:D –
我明白了。我在下面發佈了我的代碼。最終答案的格式爲:RDD [(Int,Double)],隨機生成並且規範爲1. – jtitusj