我的输入spark-dataframe名为df,
+---------------+----+----+----+
|Main_CustomerID| P1| P2| P3|
+---------------+----+----+----+
| 101| 1|null| 2|
| 102|null|null| 3|
| 103| 1| 1|null|
+---------------+----+----+----+我需要将df的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|
+---------------+---+---+---+但是我需要使用比这个for loop更好的解决方案。我该怎么做?
发布于 2018-07-02 10:12:49
DataFrameNaFunctions来了
def fill(value: T, cols: Array[String]): DataFrame和
def fill(value: T): DataFrame可以分别填充列(由cols表示)和所有列的子集。
然而,这里没有任何性能改进--只是一个更简洁的代码。
当我尝试这样做时,df.na.fill(0)并没有将它分配给一个新的数据帧。所以df没有变化。通过分配给一个新的数据框架,我可以看到变化。
DataFrames是不变的。您的代码不会修改现有的对象,它只是覆盖var。如前所述,这里没有任何性能改进。
https://stackoverflow.com/questions/51132398
复制相似问题