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。我错过了什么吗?
答案 0 :(得分:0)
IndexedRowMatrix
不支持乘以另一个IndexedRowMatrix
。它仅支持乘本地Matrix
(mllib.linalg.Matrix
)。
要使分布式矩阵相乘,您必须在BlockMatrix
周围创建一个包装器,此时此处(Spark 1.6)是MLlib中唯一支持另一个分布式矩阵乘法的分布式结构。