2017-07-18 104 views
0

我有以下數據框:查找和替換不工作 - 數據幀火花斯卡拉

df.show

+----------+-----+ 
| createdon|count| 
+----------+-----+ 
|2017-06-28| 1| 
|2017-06-17| 2| 
|2017-05-20| 1| 
|2017-06-23| 2| 
|2017-06-16| 3| 
|2017-06-30| 1| 

我想0,它是大於1,以取代計數值,即所得數據幀應該是:

+----------+-----+ 
| createdon|count| 
+----------+-----+ 
|2017-06-28| 1| 
|2017-06-17| 0| 
|2017-05-20| 1| 
|2017-06-23| 0| 
|2017-06-16| 0| 
|2017-06-30| 1| 

我嘗試下面的表達式:

df.withColumn("count", when(($"count" > 1), 0)).show

但產量

+----------+--------+ 
| createdon| count| 
+----------+--------+ 
|2017-06-28| null| 
|2017-06-17|  0| 
|2017-05-20| null| 
|2017-06-23|  0| 
|2017-06-16|  0| 
|2017-06-30| null| 

我無法理解,爲什麼價值1,是越來越顯示null以及如何克服這一點。誰能幫我?

回答

0

您需要在when之後連鎖otherwise以指定條件不成立的值;對你來說,這將是count柱本身:

df.withColumn("count", when(($"count" > 1), 0).otherwise($"count")) 
0

這可以使用udf函數來完成過

def replaceWithZero = udf((col: Int) => if(col > 1) 0 else col) //udf function 

df.withColumn("count", replaceWithZero($"count")).show(false) //calling udf function 

注:udf功能應該總是選擇只有當沒有內置因爲它需要列數據的序列化和反序列化。