我想使用Spark存储一个大的稀疏矩阵,
所以我尝试使用CoordinateMatrix
,因为它是一个分布式矩阵。
但是,我还没有找到直接访问每个条目的方法,例如:
apply(int x, int y)
我只发现了以下功能:
public RDD<MatrixEntry> entries()
在这种情况下,我必须遍历条目以找出我想要的那个,这不是有效的方式。
之前有人使用CoordinateMatrix
吗?
如何有效地从CoordinateMatrix
获取每个条目?
答案 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))