【问题标题】:Is it possible to use Option with spark UDF是否可以将 Option 与 spark UDF 一起使用
【发布时间】:2016-09-08 12:57:12
【问题描述】:

我想使用Option 作为我的函数的输入类型。

udf((oa: Option[String], ob: Option[String])) => …

以更实用的方式处理 null 值。

有没有办法做到这一点?

【问题讨论】:

    标签: scala apache-spark


    【解决方案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"))
    

    【讨论】:

      猜你喜欢
      • 2018-04-22
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 2021-11-12
      • 2016-04-01
      • 2011-01-20
      • 2018-08-11
      相关资源
      最近更新 更多