IndexedRowMatrix
类的PySpark包装器并没有包括所有的方法,特别是multiply()方法丢失了,即使它包含在它包装的Java实现中。我尝试手动将其添加到PySpark/MlLib/inalg/分布式.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: Method multiply([class org.apache.spark.mllib.linalg.distributed.IndexedRowMatrix]) does not exist at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:335) at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:344) at py4j.Gateway.invoke(Gateway.java:252) at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133) at py4j.commands.CallCommand.execute(CallCommand.java:79) at py4j.GatewayConnection.run(GatewayConnection.java:209) at java.lang.Thread.run(Thread.java:745)
这是Spark版本1.6.1,因此它应该包含此方法AFAIK。我错过什么了吗?在
IndexedRowMatrix
不支持与另一个IndexedRowMatrix
相乘。它只支持与局部Matrix
(mllib.linalg.Matrix
)相乘。在为了乘法分布式矩阵,您必须创建一个包装器,它是目前MLlib中唯一支持与另一个分布式矩阵相乘的分布结构(spark1.6)。在
相关问题 更多 >
编程相关推荐