IndexedRowMatrix的pyspark包装器multiply()

时间:2016-04-07 02:47:58

标签: python apache-spark pyspark apache-spark-mllib

IndexedRowMatrix类的PySpark包装器并不包含所有方法 - 具体来说,即使它包含在Java实现中,它仍然缺少multiply()方法。我尝试将其手动添加到PySpark / MlLib / inalg / distributed.py,如下所示:

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)

但是,当我尝试使用此方法时出现以下错误:

  

py4j.Py4JException:方法multiply([class org.apache.spark.mllib.linalg.distributed.IndexedRowMatrix])不存在           at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:335)           at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:344)           在py4j.Gateway.invoke(Gateway.java:252)           at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)           在py4j.commands.CallCommand.execute(CallCommand.java:79)           在py4j.GatewayConnection.run(GatewayConnection.java:209)           在java.lang.Thread.run(Thread.java:745)

这是Spark版本1.6.1,因此应该包含此方法AFAIK。我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

IndexedRowMatrix不支持乘以另一个IndexedRowMatrix。它仅支持乘本地Matrixmllib.linalg.Matrix)。

要使分布式矩阵相乘,您必须在BlockMatrix周围创建一个包装器,此时此处(Spark 1.6)是MLlib中唯一支持另一个分布式矩阵乘法的分布式结构。