Ich möchte Zufallsvektoren mit Norm 1 in Spark generieren.Wie Zufallsvektor in Spark generiert werden
Da der Vektor sehr groß sein könnte, möchte ich es verteilt werden, Und da Daten in RDD keine Reihenfolge hat, möchte ich den Vektor in Form von RDD [(Int, Double)] speichern, weil ich auch müssen diesen Vektor verwenden, um eine Matrix-Vektor-Multiplikation durchzuführen.
Also, wie könnte ich diese Art von Vektor generieren?
Hier ist mein Plan für heute:
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
Ich denke, es ist genug, um nicht elegant, weil es einem geht durch „verteilt -> einzelnen Knoten -> verteilt“ -Prozess.
Gibt es einen besseren Weg? Danke: D
Möchten Sie eine zufällige rdd, deren Norm ist 1 oder eine normalverteilte rdd? – jtitusj
@JohnTitusJungao Ich denke, ich will nur eine zufällige rdd, deren Norm ist 1. normal verteilt ist ok nach meinem Code: D –
Ich sehe. Ich habe meinen Code unten gepostet. Format der endgültigen Antwort: RDD [(Int, Double)], zufällig generiert und Norm ist 1. – jtitusj