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

问题描述 投票:1回答:2

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

较旧版本的Spark有org.jblas.DoubleMatrix,但在Spark 2.4中不存在,我找不到他们用它替换它的内容。

我在哪里寻找火花2.4中的线性代数示例?

我目前的需要(余弦相似度)不需要RDD。

scala apache-spark linear-algebra
2个回答
2
投票

found由于许可证不相容而被删除了JBlas并被netlib-java取代。您可能想要查看它,这是低级BLAS,LAPACK和ARPACK的包装器。

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

对于矢量和矩阵,您可以使用: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 repo:https://github.com/apache/spark/blob/master/examples/src/main/scala/org/apache/spark/examples/mllib/CosineSimilarity.scala中找到余弦相似性实现


0
投票

添加到Daniel Sobrado的良好响应中,spark 2.4还附带了Breeze支持Breeze Linear Algebra这个库具有矩阵默认为列主要排序的好处,如Matlab,但索引是基于0的,如Numpy。 Breeze支持索引和切片,线性代数函数(Linear solve, transpose, Determinant, Inverse, Eigenvalues , Eigenvectors, Singular Value Decomposition)和操作(Vector dot product, Elementwise addition, Shaped/Matrix multiplication, Elementwise multiplication, Elementwise max, Elementwise argmax), etc.需要注意的是,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.")
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.