1
我在使用mllib.linalg中的RDD时遇到了一些哲学问题。在数值线性代数中,人们想要使用可变数据结构,但是由于在Spark中所有的东西(RDDs)都是不可变的,所以我想知道是否有办法解决这个问题,特别是在我处理的情况下。按顺序更新矩阵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)
按顺序思维,我想通过
for (k <- 0 to N - 1) {
xk(::, k + 1) := Gk * xk(::, k)
}
但在访问/通过x0
,而正常情况下在斯卡拉/微风由xk(::, 0) := x0
完成更新xk
第一列和其他列mllib.linalg.Matrices没有(适用于!)为其定义的方法here。只是访问一个列(行)反对不变性?如果我使用RowMatrix
怎么办?我可以访问/更新行吗?
我的矩阵可以是本地的(如上)或分布式和 我想知道在一般情况下,如果上面的方法可以在功能性的方式来完成。
我会很感激任何评论或帮助。