1
我想寫一個火花UDF,用0.0代替雙字段的空值。我正在使用數據集API。這裏的UDF:火花UDF無法在雙字段的空值
val coalesceToZero=udf((rate: Double) => if(Option(rate).isDefined) rate else 0.0)
這是基於我測試了以下功能將被精細的工作:
def cz(value: Double): Double = if(Option(value).isDefined) value else 0.0
cz(null.asInstanceOf[Double])
cz: (value: Double)Double
res15: Double = 0.0
但是,當我以下列方式使用它星火UDF不起作用。
myDS.filter($"rate".isNull)
.select($"rate", coalesceToZero($"rate")).show
+----+---------+
|rate|UDF(rate)|
+----+---------+
|null| null|
|null| null|
|null| null|
|null| null|
|null| null|
|null| null|
+----+---------+
不過了以下工作:
val coalesceToZero=udf((rate: Any) => if(rate == null) 0.0 else rate.asInstanceOf[Double])
所以我在想,如果有火花的處理空Double值一些特殊的方法。
這看起來像_DataFrame_ API,而不是_Dataset_ API - 「myDS」的類型是什麼? –
它是一個大的案例類,其中「費率」字段的類型是雙倍。我通過執行sourceDF.as [MyCaseClass] –
來初始化數據集。參閱相關問題https://issues.apache.org/jira/browse/SPARK-12648 - 允許UDF使用'Option [Double]'作爲可輸入的輸入的建議雙列(和其他基元) –