2017-06-13 66 views
0

我有一个RDD [(Int,Array [Double],Double,Double)]。如何更新RDD

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) 
    }) 

现在我想在每个记录更新的α的值(如10)

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

我得到了错误

Error: reassignment to val 
     x._4 = 10 

我已经改变了所有的VAL为VAR但仍然会出现错误。如何更新alpha的值。我想知道如何更新RDD中的整行或特定行。

回答

1

RDD的性质是immutable。它们可以很容易地制作成cachingsharingreplicating。它总是安全的复制,而不是在多线程系统中进行变异,如处理中的fault tolerancecorrectness。不可变数据的恢复比可变数据容易得多。

Transformation就像是copyingRDD数据到另一个RDD每一个变量都被视为val即它们immutable所以如果你正在寻找与10替换最后一个双,你能做的就是

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