簡體   English   中英

是否可以使用帶有spark UDF的Option

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM