【问题标题】:How to access CoordinateMatrix entries directly in Spark?如何在 Spark 中直接访问 CoordinateMatrix 条目?
【发布时间】:2015-07-24 19:52:42
【问题描述】:
我想使用 Spark 存储一个大的稀疏矩阵,
所以我尝试使用CoordinateMatrix,因为它是一个分布式矩阵。
但是,我还没有找到像这样直接访问每个条目的方法:
apply(int x, int y)
我只找到了这样的功能:
public RDD<MatrixEntry> entries()
在这种情况下,我必须遍历条目以找出我想要的条目,这不是有效的方法。
有人用过CoordinateMatrix吗?
我应该怎么做才能有效地从CoordinateMatrix 获取每个条目?
【问题讨论】:
标签:
matrix
apache-spark
distributed-computing
sparse-matrix
【解决方案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))