我对 mllib.linalg 中使用的 RDD 存在哲学问题。在数值线性代数中,人们想使用可变数据结构,但由于在 Spark 中一切(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
by的第一列x0
,通常在 scala/breeze 中由 完成xk(::, 0) := x0
,其他列由
for (k <- 0 to N - 1) {
xk(::, k + 1) := Gk * xk(::, k)
}
但是在mllib.linalg.Matrices中没有为它定义(应用喜欢!)方法。是否只是针对不变性访问列(行)?如果我使用RowMatrix
怎么办?那我可以访问/更新行吗?
我的矩阵可以是本地的(如上)或分布式的,我想知道一般情况下,上述过程是否可以以功能方式完成。
我将不胜感激任何评论或帮助。