Spark UDF返回类型

时间:2018-04-23 02:03:07

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

我正试图制作一个像这样的UDF:

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

该函数在逻辑中有一些退出点,但它按照以下方式抱怨return语句:

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] {

1 个答案:

答案 0 :(得分:0)

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

正如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语句是正确的。