【问题标题】:Spark UDF return typeSpark UDF 返回类型
【发布时间】:2018-04-23 02:03:07
【问题描述】:

我正在尝试制作这样的 UDF:

import org.apache.spark.sql.functions.udf
def myFunction = udf( (input: String, modifier: Seq[String]) => {
    // Logic goes here...
    return Option(myString)
})

该函数在逻辑中有几个退出点,但它抱怨返回语句如下:

Message: <console>:69: error: method myFunction has return statement; needs result type
        return Option(myString)

过去几个小时我一直在试图弄清楚如何将返回类型声明为 Option[String],但似乎没有任何效果。

我认为这是正确的,但它不喜欢它:

udf( (input: String, modifier: Seq[String]) => Option[String] {

【问题讨论】:

标签: scala apache-spark user-defined-functions


【解决方案1】:

我觉得我解决了这个问题。

正如 Ramesh 指出的,您不必在 UDF 中使用 return 关键字。我最初是这样做的,因为有一堆 IF-THEN-ELSE 类型的块,我希望选择更早地退出函数并返回值。

我现在更新了这个:

def myFunction = udf( (input: String, modifier: Seq[String]) => Option[String] {
  var retrunStr = ""
  // Logic goes here...
    // Conditionally set a value
    retrunStr = input
  // Finally just set the result to the returnStr
  retrunStr
})

这似乎可行,尽管携带 returnStr 变量确实感觉很乱。如果我真的很好,我应该能够让我的条件逻辑返回正确的值。

我删除了逻辑中的一些复杂性,但我使用的是嵌套匹配器和 foreach 循环和可破坏对象等,但这是另一个主题。

再次感谢 Ramesh,您完全避免使用 return 语句是对的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-08
    • 2017-02-06
    • 2017-02-05
    • 2017-05-11
    • 2017-05-21
    • 1970-01-01
    • 2018-11-29
    相关资源
    最近更新 更多