首页 文章

IndexedRowMatrix的pyspark包装multiply()

提问于
浏览
-1

IndexedRowMatrix 类的PySpark包装器不包含在它包含的Java实现中 . 我尝试将其手动添加到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:在py4j.reflection.ReflectionEngine的py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:335)中不存在方法multiply([class org.apache.spark.mllib.linalg.distributed.IndexedRowMatrix]) . py4j.commands.CallCommand.exe,py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)py4j.Gateway.invoke(Gateway.java:252)上的getMethod(ReflectionEngine.java:344)(CallCommand.java:79 )在java.lang.Thread.run(Thread.java:745)的py4j.GatewayConnection.run(GatewayConnection.java:209)

这是Spark版本1.6.1,所以它应该包括这个方法AFAIK . 我错过了什么吗?

1 回答

  • 0

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

    为了使分布式矩阵相乘,你必须在BlockMatrix周围创建一个包装器,这是目前(Spark 1.6)MLlib中唯一支持另一个分布式矩阵乘法的分布式结构 .

相关问题