是否可以将 Option 与 spark UDF 一起使用
Posted
技术标签:
【中文标题】是否可以将 Option 与 spark UDF 一起使用【英文标题】:Is it possible to use Option with spark UDF 【发布时间】:2016-09-08 12:57:12 【问题描述】:我想使用Option
作为我的函数的输入类型。
udf((oa: Option[String], ob: Option[String])) => …
以更实用的方式处理 null
值。
有没有办法做到这一点?
【问题讨论】:
【参考方案1】:据我所知,这不是直接可能的。没有什么能阻止你用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"))
【讨论】:
以上是关于是否可以将 Option 与 spark UDF 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
我可以将 spark 数据帧作为参数发送给 pandas UDF
如何将复杂的外部变量(例如映射值)从 Spark 与 Java 中的驱动程序传递给 UDF?