У меня возникают философские проблемы с RDD, используемыми в mllib.linalg. В числовой линейной алгебре хочется использовать изменчивую структуру данных, но поскольку в Spark все (RDD) неизменно, я хотел бы знать, есть ли способ обойти это, особенно для следующей ситуации, с которой я имею дело;Последовательное обновление столбцов матрицы RDD
import org.apache.spark.mllib.linalg._
import breeze.numerics._
val theta = constants.Pi/64
val N = 1000
val Gk: Matrix = Matrices.dense(2, 2, Array(
cos(theta), sin(theta),
-sin(theta), cos(theta))
)
val x0: Vector = Vectors.dense(0.0, 1.0)
var xk = DenseMatrix.zeros(2, N + 1)
Последовательная мышление, я хотел бы получить доступ к/обновить первый столбец xk
по x0
, где обычно в Скале/ветер делается xk(::, 0) := x0
, и другие столбцы по
for (k <- 0 to N - 1) {
xk(::, k + 1) := Gk * xk(::, k)
}
, но в mllib.linalg.Матрисы там нет (применять как!) метод, определенный для него here. Просто доступ к столбцу (строке) против неизменности? Что делать, если я использую RowMatrix
? могу ли я получить доступ/обновить строки?
Мои матрицы могут быть локальными (как выше) или распространяться и Я хотел бы знать, в общем случае, если вышеописанный процесс может быть сделано в функциональном стиле.
Буду признателен за любые комментарии или помощь.