【问题标题】:Doing basic linear algebra in Spark 2.4在 Spark 2.4 中做基本的线性代数
【发布时间】:2019-02-04 05:10:42
【问题描述】:

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

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

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

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

【问题讨论】:

标签: scala apache-spark linear-algebra


【解决方案1】:

我已经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

【讨论】:

    【解决方案2】:

    除了 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.")
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 2019-07-24
      • 1970-01-01
      • 1970-01-01
      • 2015-10-07
      • 2019-09-08
      相关资源
      最近更新 更多