2017-02-16 66 views
0

我有一個火花數據框與列A,B,C,D所有類型雙。我需要添加一個新列「比」將被計算如下:在Scala的NULL比較udf

if(A IS NULL && B IS NULL) 
    then 0 
if(A IS NOT NULL && B IS NULL) 
    then A/D 
if(A IS NULL && B IS NOT NULL) 
    then C/B 
if(A IS NOT NULL && B IS NOT NULL) 
    then A/B 

這怎麼能在斯卡拉爲Double做不能用NULL進行比較?

回答

2

有兩種方法可以做到這一點。

首先是定義你的UDF的參數是java.lang.Double中,而不是雙

這將使寫UDF簡單,但它很可能是雙原始和慢之間由於裝箱和拆箱java util雙對象。

更好的方法是根本不使用UDF。您可以使用數據幀的語義:

df.withColumn("newOne", when($"a".isNull && $"b".isNull, lit(0)).otherwise(when($"a".isNotNull && $"b".isNotNull, $"a"/$"d").otherwise(...)) 

基本上用的是保存爲如果,否則是一樣的人。 $「a」.isNull檢查列a的值是否爲空,isNotNull是否檢查它是否爲空。點亮(N)爲所有元素賦予N,您可以使用$「a」/ $「b」來計算a和b列中的值之間的比率