在Spark 2.4中进行基本线性代数

3
Spark 2.4是否有支持基本线性代数运算(如点积、范数、矩阵和向量乘法)的向量和矩阵类?我在Vector、DenseVector或RowMatrix等类中找不到任何线性代数支持。旧版Spark有org.jblas.DoubleMatrix,但在Spark 2.4中不存在,我找不到替代它的东西。在哪里可以找到Spark 2.4中的线性代数示例?对于我目前的需求(余弦相似度),我不需要RDDs。

https://github.com/scalanlp/breeze/wiki/Linear-Algebra-Cheat-Sheet - sramalingam24
1
您也可以考虑使用dn4j或dn4s。 - Andronicus
2个回答

3

发现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


2
除了Daniel Sobrado的好回答外,Spark 2.4还支持Breeze 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.")
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接