我有一個帶有6列的RDD
,其中最後5列可能包含NaN。我的目的是用非Nan的最後5個值的其餘值的平均值替換NaN。例如,具有這種輸入:用Scala-Spark中的平均值填充Nan
1, 2, 3, 4, 5, 6
2, 2, 2, NaN, 4, 0
3, NaN, NaN, NaN, 6, 0
4, NaN, NaN, 4, 4, 0
輸出應該是:
1, 2, 3, 4, 5, 6
2, 2, 2, 2, 4, 0
3, 3, 3, 3, 6, 0
4, 3, 3, 4, 4, 0
我知道如何填補這些NaN的配列改造RDD
到DataFrame
的平均值:
var aux1 = df.select(df.columns.map(c => mean(col(c))) :_*)
var aux2 = df.na.fill(/*get values of aux1*/)
我的問題是,你如何做這個操作,而不是用平均列填充NaN,用平均值填充一個子集行的p?
所以,我對我的回答改進,使得'平均'-udf能夠處理任意數量的列。我尊重你已經接受了另一個答案,但我想指出,我的解決方案不需要你在'rdds'和'dataframes'之間來回切換,而是直接在'dataframe'上運行:) –