Spark 2.4是否具有支持基本线性代数运算(例如点积,范数,矩阵和向量乘法)的Vector和Matrix类?在Vector,DenseVector或RowMatrix之类的类中找不到线性代数支持。
Spark的旧版本具有org.jblas.DoubleMatrix,但在Spark 2.4中不存在,我找不到用它们替换的东西。
在Spark 2.4的哪里寻找线性代数示例?
我不需要RDD来满足当前需求(余弦相似度)。
答案 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.")
}
}