Заниматься базовой линейной алгеброй в Spark 2.4 - PullRequest
0 голосов
/ 04 февраля 2019

Есть ли в Spark 2.4 классы Vector и Matrix, которые поддерживают базовые линейные алгебраические операции, такие как скалярное произведение, норма, матрица и векторное умножение?Я не могу найти поддержку линейной алгебры в таких классах, как Vector, DenseVector или RowMatrix.

В старых версиях Spark был org.jblas.DoubleMatrix, но в Spark 2.4 его нет, и я не могунайдите то, что они заменили.

Где я могу найти примеры линейной алгебры в искре 2.4?

Мне не нужны СДР для моей текущей потребности (косинусное сходство).

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

В дополнение к хорошему отклику Даниэля Собрадо, spark 2.4 также поставляется с поддержкой Breeze Линейная алгебра Breeze Эта библиотека имеет преимущества, заключающиеся в том, что в матрицах по умолчанию используется мажорный порядок столбцов, такой как 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 для своих основных процедур линейной алгебры. Ниже приведен пример кода scala, который использует Breeze

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.")
  }
}
0 голосов
/ 04 февраля 2019

Я обнаружил , что 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

...