我有和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中的整行或特定行。
答案 0 :(得分:2)
RDD
本质上是immutable
。这样做是为了方便caching
,sharing
和replicating
。它总是安全复制,而不是在多线程系统中进行变异,例如处理中fault tolerance
和correctness
的火花。不可变数据的重新创建比可变数据更容易。
Transformation
就像copying
RDD
数据到另一个RDD
每个变量都被视为val
,即它们是immutable
所以如果你正在寻找用10取代最后一双,你可以做到的是
var tmp = full_data.map( x=> {
(x._1, x._2, x._3, 10)
})