2016-04-07 6 views
-1

Der PySpark-Wrapper für die Klasse IndexedRowMatrix enthält nicht alle Methoden - speziell die multiply() -Methode fehlt, obwohl sie in der Java-Implementierung enthalten ist, die sie umschließt. Ich habe versucht, ihn manuell zu PySpark/MlLib/inalg/distributed.py Zugabe, wie folgt:pyspark Wrapper für IndexedRowMatrix multiplizieren()

def multiply(self, other): 
    other_java_matrix = other._java_matrix_wrapper._java_model 
    java_matrix = self._java_matrix_wrapper.call("multiply", other_java_matrix) 
    return IndexedRowMatrix(java_matrix) 

Allerdings bekomme ich folgende Fehlermeldung, wenn ich versuche, diese Methode zu verwenden:

py4j.Py4JException : Methode multiply ([Klasse org.apache.spark.mllib.linalg.distributed.IndexedRowMatrix]) existiert nicht bei py4j.reflection.ReflectionEngine.getMethod (ReflectionEngine.java:335) bei py4j.reflection.ReflectionEngine.getMethod (ReflectionEngine.java:344) bei py4j.Gateway.invoke (Gateway.java:252) bei py4j.commands.Ab stractCommand.invokeMethod (AbstractCommand.java:133) bei py4j.commands.CallCommand.execute (CallCommand.java:79) bei py4j.GatewayConnection.run (GatewayConnection.java:209) bei java.lang.Thread.run (Thread.java:745)

Dies ist Spark-Version 1.6.1, so sollte es diese Methode AFAIK enthalten. Fehle ich etwas?

Antwort

0

IndexedRowMatrix unterstützt keine Multiplikation mit einem anderen IndexedRowMatrix. Es unterstützt nur die Multiplikation mit einem lokalen Matrix (mllib.linalg.Matrix).

Um verteilte Matrizen zu multiplizieren, müssen Sie einen Wrapper um BlockMatrix erstellen, der in diesem Moment (Spark 1.6) die einzige verteilte Struktur in MLlib ist, die die Multiplikation mit einer anderen verteilten Matrix unterstützt.