我有一个带有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'上运行:) –