2016-04-10 21 views
1

EĞER bu hesaplama (Value- sıfıra bölme önlemek çalışıyorum (Kıvılcım Scala dataframe bölünme ve

Bu benim ile geldi budur)/StdDev demek:

%sql 
select id,cykle, 
s2-(a2/IF(sd2 == 0.0, 0.00000001, sd2)) as std2, 
s3-(a3/IF(sd3 == 0.0, 0.00000001, sd3)) as std3, 
s4-(a4/IF(sd4 == 0.0, 0.00000001, sd4)) as std4 
from XXX where id = 1 order by cykle 

İki sorulara - daha iyi bir yol - Ben bölünme kullanabilir ve scala kodunda bu işe yaramazsa İSE:?

($"s1" - ("$a1"/IF("$sd1" == lit(0.0),lit(0.00000001),"$sd1"))).as("std1") 

cevap

3

yapabilirsiniz ya coalesce:

COALESCE(a2/sd, a2/0.00000001) 
val c: Double = ??? 
coalesce($"a2"/$"sd", $"a2"/lit(c)) 

veya kullanım CASE ... WHEN yapısı:

when($"sd" === 0, $"a2"/lit(c)).otherwise($"a2"/$"sd") 

CASE sd 
    WHEN 0 THEN a2/0.00000001 
    ELSE a2/sd 
END 
amacınız sonra ölçeklendirme 0 varsaymak daha mantıklı tutuyor eğer rağmen.

select(..., 'a2/coalesce('sd, lit(c)), ...) 
:
0

Ben daha kompakt aşağıdaki formu bulundu