--Organisation von Apache Spark's Sparse Vector und Dense Vector
Spärlich bedeutet "Quetschen".
Wenn die Elemente eines Vektors viele Nullen enthalten Zum Beispiel
[0.1,0.0,0.0,0.0,0.3]
Wenn es einen Vektor gab
Diesen Vektor ausdrücken
"** Der Wert des ersten Elements beträgt 0,1 **, der Wert des letzten Elements beträgt 0,3 ** und die Anzahl der Elemente beträgt 5 **."
Es basiert auf der Idee, dass die Informationen ausreichen. (Die Werte anderer Elemente sind ** 0,0 **)
Auf diese Weise kann die Informationsmenge reduziert werden, sodass der Vorteil darin besteht, dass ** Speicherplatz gespart werden kann **.
In den meisten Bibliotheken für maschinelles Lernen ist so etwas wie ein spärlicher Vektor implementiert.
Jetzt ist es einfach, in Spark einen spärlichen Vektor zu erstellen.
Verwenden Sie ** org.apache.spark.ml.linalg.SparseVector ** im Paket ** spark.ml **.
Die Klasse ** SparseVector ** wird mit einem Array von Indizes (Indizes) und einem Array von Werten (Werten) initialisiert.
Wenn Sie [0.1,0.0,0.0,0.0,0.3]
erstellen möchten, Index-Array (Indizes) new int [] {0, 2}
und Wert-Array (Werte) new double [] {0.1, 0.5}
OK, wenn initialisiert
SparseVector
// SparseVector(Spärlicher Vektor)
int size = 3;//Vektorelementgröße
int[] indices = new int[] { 0, 4 };
double[] svalues = new double[] { 0.1, 0.5 };
Vector svec = new SparseVector(size, indices, svalues);
System.out.println("SparseVector=" + Arrays.toString(svec.toArray()));
Ausführungsergebnis
SparseVector=[0.1, 0.0, 0.0, 0.0, 0.5]
Es kann mit Vector # toArray
angeordnet werden, aber natürlich wird der verbrauchte Speicher gespeichert, da nur Indizes (Array von Indizes) und Werte (Array von Werten) beibehalten werden, wenn sie nicht benötigt werden.
Paar mit dem spärlichen Vektor. Es enthält alle Werte der Elemente des Vektors wie ein allgemeines Array.
[0.1,0.0,0.0,0.0,0.3]
Dichtes Vecotr wird durch Angabe eines Arrays von Werten (Werten) initialisiert.
Wenn Sie [0.1, 0.0, 0.0, 0.0, 0.3]
erstellen möchten, übergeben Sie das Array new double [] {0.1, 0.0, 0.0, 0.0, 0.5}
der Anzahl der Elemente. Ist dichter Vektor
DenseVector
// DenseVector(Dichter Vektor)
double[] dvalues = new double[] { 0.1, 0.0, 0.0, 0.0, 0.5 };
Vector dvec = new DenseVector(dvalues);
System.out.println("DenseVector=" + Arrays.toString(dvec.toArray()));
Ausführungsergebnis
DenseVector=[0.1, 0.0, 0.0, 0.0, 0.5]
Verwenden Sie ** Apache Spark ** aus Java
SparkVectorExamples.java
package org.riversun.spark;
import java.util.Arrays;
import org.apache.spark.ml.linalg.DenseVector;
import org.apache.spark.ml.linalg.SparseVector;
import org.apache.spark.ml.linalg.Vector;
public class SparkVectorExamples {
public static void main(String[] args) {
// DenseVector(Dichter Vektor)
double[] dvalues = new double[] { 0.1, 0.0, 0.0, 0.0, 0.5 };
Vector dvec = new DenseVector(dvalues);
System.out.println("DenseVector=" + Arrays.toString(dvec.toArray()));
// SparseVector(Spärlicher Vektor)
int size = 5;//Vektorelementgröße
int[] indices = new int[] { 0, 4 };
double[] svalues = new double[] { 0.1, 0.5 };
Vector svec = new SparseVector(size, indices, svalues);
System.out.println("SparseVector=" + Arrays.toString(svec.toArray()));
}
}
Ausführungsergebnis
DenseVector=[0.1, 0.0, 0.0, 0.0, 0.5]
SparseVector=[0.1, 0.0, 0.0, 0.0, 0.5]
Recommended Posts