2016-01-22 54 views
2

我哈瓦做一些數據的機器學習之前,清潔和我的數據框的樣子如下:如何使用Java在Spark SQL的DataFrame中執行「col(a)== null?col(b):col(c)」列操作?

 
+-------+--------+---------+--------+-------+ 
| userid|artistid|playcount| badid| goodid| 
+-------+--------+---------+--------+-------+ 
|2158448|10006467|  1|10006467|1244705| 
|2144107|10009022|  5|10009022|1024524| 
|1006831|10009473|  1|10009473|1010373| 
|2011584|10016312|  13|10016312|1000127| 
|2052189|10021776|  2|10021776|1082784| 
|2052189|10022667|  1|10022667|1082784| 
|1060325|10039984|  1|10039984|1001463| 
|2077268|10043655|  1|10043655|1000597| 
|1038421|10048281|  2|10048281|1256384| 
|2116983|10055238|  1|10055238|1003509| 
|2211143|10055238|  27|10055238|1003509| 
|1000083| 1006162|  2| 1006162|1048788| 
|1001371| 1006162|  1| 1006162|1048788| 
|1001411| 1006162|  1| 1006162|1048788| 
|1002138| 1006162|  3| 1006162|1048788| 
|1009943| 1006162|  2| 1006162|1048788| 
|1021747| 1006162|  4| 1006162|1048788| 
|1031726| 1006162|  1| 1006162|1048788| 
|1032062| 1006162|  2| 1006162|1048788| 
|1036948| 1006162|  1| 1006162|1048788| 
+-------+--------+---------+--------+-------+ 

我需要生成包含當前所有列,並也的Java新增一欄,新的數據幀。這個新的「列」的邏輯是這樣的:

 
IsNull(Col('badid')) ? Col('artistid') : Col('goodid') 

有什麼建議嗎?

回答

1

您可以使用when/otherwise

when(col("badid").isNull(), col("artistid")).otherwise(col("goodid")) 

這相當於SQL CASE WHEN ... ELSE

CASE 
    WHEN badid IS NULL THEN artistid 
    ELSE goodid 
END 
+0

這是一個簡明扼要的回答。現在,我知道我需要「導入靜態org.apache.spark.sql.functions。*;」在我的Java代碼中並且使用這些API方法。非常感謝[zero323](http://stackoverflow.com/users/1560062/zero323)! –

相關問題