如何更新RDD

时间:2017-06-13 12:16:49

标签: scala apache-spark rdd

我有和RDD [(Int,Array [Double],Double,Double)]。

val full_data = rdd.map(row => {
        val label = row._1
        val feature = row._2.map(_.toDouble)
        val QD = k_function(feature)
        val alpha = 0.0
        (label,feature,QD,alpha)
    })

现在我想更新每条记录中的alpha值(比如10)

var tmp = full_data.map( x=> {
      x._4 = 10
    })

我收到了错误

Error: reassignment to val
         x._4 = 10

我已将所有val更改为var,但仍然会发生错误。如何更新alpha的值。我想知道如何更新RDD中的整行或特定行。

1 个答案:

答案 0 :(得分:2)

RDD本质上是immutable。这样做是为了方便cachingsharingreplicating。它总是安全复制,而不是在多线程系统中进行变异,例如处理中fault tolerancecorrectness的火花。不可变数据的重新创建比可变数据更容易。

Transformation就像copying RDD数据到另一个RDD每个变量都被视为val,即它们是immutable所以如果你正在寻找用10取代最后一双,你可以做到的是

var tmp = full_data.map( x=> {
      (x._1, x._2, x._3, 10)
    })