1
我struggeling其中在數據幀(其中從蜂巢表起源)操作的UDF處理空值由浮體的結構體的:火花UDF空處理
數據幀(points
)具有以下模式:
root
|-- point: struct (nullable = true)
| |-- x: float (nullable = true)
| |-- y: float (nullable = true)
例如,我想計算x和y的總和。請注意,在下面的示例中,我不「處理」空值,但我希望能夠檢查我的udf是否point
,x
或y
是null
。
第一種方法:
val sum = udf((x:Float,y:Float) => x+y)
points.withColumn("sum",sum($"point.x",$"point.y"))
如果struct
點null
,在這種情況下,UDF不會求(!在UDF代碼永遠不會執行)這不起作用,則結果爲null。此外,我無法檢查x
或y
爲空,因爲Floats
在scala中不能爲空。
第二種方法:
val sum = udf((pt:Row) => pt.getFloat(0)+pt.getFloat(1))
points.withColumn("sum",sum($"point"))
下這種方法,我可以在我的UDF檢查pt
爲空,但我螺母能夠檢查x
和y
因爲Floats
不能爲空。在這種情況下,我得到一個NullPointerException
。
我該如何寫udf win來檢查struct和x和y是否爲null?
我使用的火花1.6.1
更新: 相反this question,我負責的花車,而不是與字符串(字符串可以在Scala中爲空,浮不)