2017-06-13 103 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) 
    })