更新CoordinateMatrix条目

时间:2018-01-29 10:50:08

标签: apache-spark rdd

是否有一种有效的方法来更新CoordinateMatrix的某个索引(i,j)的值? 目前我正在使用map来迭代所有值并仅在我找到那些特定索引时进行更新,但我不认为这是正确的方法

1 个答案:

答案 0 :(得分:0)

没有。 .as-console-wrapper { max-height: 100%!important; top: 0; }CoordinateMatrix支持,并且是不可变的。即使您通过以下方式优化访问:

  • 获取RDD

    entries
  • 转换为val mat: CoordinateMatrix = ??? val entries = mat.entries RDD并进行散列分区。

    ((row, col), value)
  • 仅映射单个分区:

    val n: Int = ???
    val partitioner = new org.apache.spark.HashPartitioner(n)
    val pairs = entries.map(e => ((e.i, e.j), e.value)).partitionBy(partitioner)
    

您还会为每次更新制作新的def update(mat: RDD[((Long, Long), Double)], i: Long, j: Long, v: Double) = { val p = mat.partitioner.map(_.getPartition((i, j))) p.map(p => mat.mapPartitionsWithIndex{ case (pi, iter) if pi == p => iter.map { case ((ii, jj), _) if ii == i && jj == j => ((ii, jj), v) case x => x } case (_, iter) => iter }) }