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

时间:2019-02-04 05:10:42

标签: scala apache-spark linear-algebra

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

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

在Spark 2.4的哪里寻找线性代数示例?

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

2 个答案:

答案 0 :(得分:2)

found已将JBlas由于许可证不兼容而删除,并替换为netlib-java。您可能需要研究一下,它是低级BLAS,LAPACK和ARPACK的包装。

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

对于向量和矩阵,您可以使用:org.apache.spark.mllib.linalg。{向量,向量,矩阵,矩阵}这些都支持密集和稀疏的向量和矩阵。

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

答案 1 :(得分: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.")
  }
}