如何直接在Spark中访问CoordinateMatrix条目?

时间:2015-07-24 19:52:43

标签: matrix apache-spark distributed-computing sparse-matrix

我想使用Spark存储一个大的稀疏矩阵, 所以我尝试使用CoordinateMatrix,因为它是一个分布式矩阵。

但是,我还没有找到直接访问每个条目的方法,例如:

apply(int x, int y)

我只发现了以下功能:

public RDD<MatrixEntry> entries()

在这种情况下,我必须遍历条目以找出我想要的那个,这不是有效的方式。

之前有人使用CoordinateMatrix吗?

如何有效地从CoordinateMatrix获取每个条目?

1 个答案:

答案 0 :(得分:1)

简短的回答是你没有。 RDD和CoordinateMatrix或多或少是RDD[MatrixEntry]的包装器,不适合随机访问。此外,RDD是不可变的,因此您不能简单地修改单个条目。如果这是您的要求,您可能正在寻找错误的技术。

如果您使用PairRDD,则对随机访问的支持有限。如果对这样的RDD进行了分区,则可以使用lookup方法有效地恢复单个值:

val n = ??? // Number of partitions
val pairs = mat.
    entries.
    map{case MatrixEntry(i, j, v) => ((i, j), v)}.
    partitionBy(new HashPartitioner(n))
pairs.lookup((1, 1))