scala / spark:在RDD中不更新数组

时间:2017-09-19 08:13:44

标签: scala apache-spark

我有一个LabeledPoints的RDD。一个LabeledPoint表示一行稀疏数据(即大多数值为零的数据)。

结构如下:

val lp1 = LabeledPoint(0.0, Vectors.sparse(3, Array(0, 2), Array(1.0, 3.0)))

第一个数组是列索引数组(想象一个数据帧列)。上面的LabeledPoint在第0列和第2列中具有值。

第二个数组是值。因此,列0的值为1.0,列2的值为3.0。 (第2列的值为0,因此从两个数组中省略)

问题: 我想删除第0列。这意味着第1列变为第0列,第2列变为第1列,依此类推。

我的代码如下:

private def internalShiftDownColumnsAfterIndex(index:Int):Unit=
{
  labeledPointRDD.collect().map
  {
    lp =>
      lp.features.toSparse.indices.sorted.zipWithIndex.foreach
      {

        case(colIndex,count) => if(colIndex > index)
        {
          lp.features.toSparse.indices.update(count, colIndex-1)
        }
    }
  }
}

它不起作用。列索引数组不会更改。

val lpnew:RDD[LabeledPoint]=labeledPointRDD.collect().map{.......etc

也不起作用。这给出了编译错误

错误:类型不匹配;

  

[INFO]发现:需要数组[单位]:org.apache.spark.rdd.RDD [org.apache.spark.mllib.regression.LabeledPoint]

那么,更新索引数组的最佳方法是什么?

0 个答案:

没有答案