我将输入spark-dataframe
命名为df
,
+---------------+----+----+----+
|Main_CustomerID| P1| P2| P3|
+---------------+----+----+----+
| 101| 1|null| 2|
| 102|null|null| 3|
| 103| 1| 1|null|
+---------------+----+----+----+
我需要将null
的{{1}}值替换为df
。我已经做到了,
0
我得到的val columnsListSeq = df.columns.toSeq
var newDF = df
for (index <- columnsListSeq) {
newDF = newDF.na.fill(0, Seq(index))
}
是
dataframe
但是我需要使用优化的解决方案,而不是这个+---------------+---+---+---+
|Main_CustomerID| P1| P2| P3|
+---------------+---+---+---+
| 101| 1| 0| 2|
| 102| 0| 0| 3|
| 103| 1| 1| 0|
+---------------+---+---+---+
。我该怎么办?
答案 0 :(得分:1)
DataFrameNaFunctions
随附
def fill(value: T, cols: Array[String]): DataFrame
和
def fill(value: T): DataFrame
可以分别填充列的子集(由cols
表示)和所有列。
但是,这里没有性能改进-只是更简洁的代码。
关于your comment:
当我尝试此操作时,df.na.fill(0)尚未将其分配给新的数据帧。因此,df中没有任何变化。通过分配一个新的数据框,我可以看到更改。
DataFrames
是不可变的。您的代码不会修改现有对象,只会覆盖var
。如上所述,这里没有性能改进。