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中为空,浮不)