Spark 2.4是否具有支持基本线性代数运算的矢量和矩阵类,如点积,范数,矩阵和向量乘法?我在Vector,DenseVector或RowMatrix等类中找不到任何线性代数支持。
较旧版本的Spark有org.jblas.DoubleMatrix,但在Spark 2.4中不存在,我找不到他们用它替换它的内容。
我在哪里寻找火花2.4中的线性代数示例?
我目前的需要(余弦相似度)不需要RDD。
我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中找到余弦相似性实现
添加到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.")
}
}