MLLib到Breeze向量/矩阵是org.apache.spark.mllib范围的私有吗?

lea*_*ark 7 scala-breeze apache-spark apache-spark-mllib

我已经读过MLlib局部向量/矩阵当前正在包装Breeze实现的地方,但是将MLlib转换为Breeze向量/矩阵的方法对于org.apache.spark.mllib范围是私有的.解决此问题的建议是在org.apache.spark.mllib.something包中编写代码.

有一个更好的方法吗?你能举出一些相关的例子吗?

感谢致敬,

lev*_*lev 5

我做了与 @dlwh 建议相同的解决方案。这是执行此操作的代码:

package org.apache.spark.mllib.linalg

object VectorPub {

  implicit class VectorPublications(val vector : Vector) extends AnyVal {
    def toBreeze : breeze.linalg.Vector[scala.Double] = vector.toBreeze

  }

  implicit class BreezeVectorPublications(val breezeVector : breeze.linalg.Vector[Double]) extends AnyVal {
    def fromBreeze : Vector = Vectors.fromBreeze(breezeVector)
  }
}
Run Code Online (Sandbox Code Playgroud)

请注意,隐式类扩展了 AnyVal 以防止在调用这些方法时分配新对象


dlw*_*lwh 2

据我了解,Spark 人员不想公开第三方 API(包括 Breeze),这样如果他们决定放弃第三方 API,更改会更容易。

您始终可以在该包中放置一个简单的隐式转换类,然后将其余代码编写在您自己的包中。这并不比把所有东西都放在那里好多少,但它让你这样做的原因更加明显。

  • 对于 mllib 框架的客户端来说,将代码放在 mllib.linalg 包中并不是一个可行的解决方案 (2认同)