Spark 2.4是否有支持基本线性代数运算(如点积、范数、矩阵和向量乘法)的向量和矩阵类?我在Vector、DenseVector或RowMatrix等类中找不到任何线性代数支持。旧版Spark有org.jblas.DoubleMatrix,但在Spark 2.4中不存在,我找不到替代它的东西。在哪里可以找到Spark 2.4中的线性代数示例?对于我目前的需求(余弦相似度),我不需要RDDs。
我发现JBlas由于不兼容的许可证已被移除,并被netlib-java替代。你可能需要研究一下,这是一个低级BLAS、LAPACK和ARPACK的包装器。
MLLib具有稠密和稀疏向量/矩阵的功能,它们基于RDDs:(我了解您正在寻找低级实现)
对于向量和矩阵,您可以使用:org.apache.spark.mllib.linalg.{Vector, Vectors, Matrix, Matrices},这些都支持稠密和稀疏向量和矩阵。
RowMatrix将是:org.apache.spark.mllib.linalg.distributed.RowMatrix
您可以参考文档:https://spark.apache.org/docs/latest/mllib-data-types.html
实际上,你可以在MLlib存储库中找到余弦相似度的实现:https://github.com/apache/spark/blob/master/examples/src/main/scala/org/apache/spark/examples/mllib/CosineSimilarity.scala
(线性求解、转置、行列式、逆、特征值、特征向量、奇异值分解)
和操作(向量点积、逐元素加法、形状/矩阵乘法、逐元素乘法、逐元素最大值、逐元素argmax)
等。值得注意的是,Breeze使用netlib-java作为其核心线性代数例程。以下是一个使用Breeze的Scala代码示例。import breeze.linalg.DenseVector
import com.github.fommil.netlib.BLAS
import org.slf4j.LoggerFactory
object Breeze1 {
def main(args:Array[String]): Unit = {
println("Init logging...")
System.setProperty(org.slf4j.impl.SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "TRACE");
val log = LoggerFactory.getLogger("main")
log.trace("Starting...")
val b = BLAS.getInstance()
log.trace(s"BLAS = $b")
val v = DenseVector(1,2,3,4)
log.trace("Ending.")
}
}