Scala 在Spark 2.4中学习基本线性代数

Scala 在Spark 2.4中学习基本线性代数,scala,apache-spark,linear-algebra,Scala,Apache Spark,Linear Algebra,Spark 2.4是否有支持点积、范数、矩阵和向量乘法等基本线性代数运算的向量和矩阵类?我在Vector、DenseVector或RowMatrix类中找不到任何线性代数支持 Spark的旧版本有org.jblas.DoubleMatrix,但Spark 2.4中不存在这样的版本,我也找不到他们用什么替换了它 我在哪里可以找到spark 2.4中的线性代数示例 我不需要RDD来满足我当前的需求(余弦相似性)。我知道JBlas由于许可证不兼容而被删除,并替换为。您可能想了解一下,这是一个用于低级B

Spark 2.4是否有支持点积、范数、矩阵和向量乘法等基本线性代数运算的向量和矩阵类?我在Vector、DenseVector或RowMatrix类中找不到任何线性代数支持

Spark的旧版本有org.jblas.DoubleMatrix,但Spark 2.4中不存在这样的版本,我也找不到他们用什么替换了它

我在哪里可以找到spark 2.4中的线性代数示例

我不需要RDD来满足我当前的需求(余弦相似性)。

我知道JBlas由于许可证不兼容而被删除,并替换为。您可能想了解一下,这是一个用于低级BLAS、LAPACK和ARPACK的包装器

MLLib具有密集和稀疏向量/矩阵的功能,它们基于RDD:(我知道您正在寻找底层实现)

对于向量和矩阵,您可以使用:org.apache.spark.mllib.linalg.{Vector,Vectors,Matrix,Matrix}它们支持密集和稀疏向量和矩阵

RowMatrix将是:org.apache.spark.mllib.linalg.distributed.RowMatrix

您可以参考以下文档:


事实上,您可以在MLlib repo中找到余弦相似性实现:

除了Daniel Sobrado的良好响应之外,spark 2.4还附带了Breeze支持 该库的优点是矩阵默认为列主顺序,如Matlab,但索引是基于0的,如Numpy。 Breeze支持索引和切片、线性代数函数
(线性求解、转置、行列式、逆、特征值、特征向量、奇异值分解)
和运算
(向量点积、元素加法、成形/矩阵乘法、元素乘法、元素最大值、元素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.")
  }
}

你也可以考虑使用DN4J或DN4S。