[英]Is it possible to use Option with spark UDF
我想使用Option
作为我的函数的输入类型。
udf((oa: Option[String], ob: Option[String])) => …
以更实用的方式处理null
值。
有没有办法做到这一点 ?
据我所知,这不是直接可能的。 没有什么能阻止你用Options
包装参数:
udf((oa: String, ob: String) => (Option(oa), Option(ob)) match {
...
})
使用Dataset
编码器:
val df = Seq(("a", None), ("b", Some("foo"))).toDF("oa", "ob")
df.as[(Option[String], Option[String])]
或添加一些隐式转换:
implicit def asOption[T](value: T) : Option[T] = Option(value)
def foo(oa: Option[String], ob: Option[String]) = {
oa.flatMap(a => ob.map(b => s"$a - $b"))
}
def wrap[T, U, V](f: (Option[T], Option[U]) => V) =
(t: T, u: U) => f(Option(t), Option(u))
val foo_ = udf(wrap(foo))
df.select(foo_($"oa", $"ob"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.