方法 my_udf 有返回语句;需要结果类型

Posted

技术标签:

【中文标题】方法 my_udf 有返回语句;需要结果类型【英文标题】:method my_udf has return statement; needs result type 【发布时间】:2020-12-22 11:54:35 【问题描述】:

我读到在大多数情况下都不需要为 udf 指定返回类型,但如果您添加 return 语句,则有必要。

我有以下 udf,它在内部迭代一个列表,如果匹配,我希望 udf 立即返回。根据我在这里找到的其他答案,我尝试了以下两种方法来定义返回类型:

def removeSalutation = udf((name: String) => String 

    val salutationList = List("MRS", "MR", "MSTR", "MISS", "MS", "DR")

    for(salutation <- salutationList)
        if(name.endsWith(salutation))
            return name.dropRight(salutation.length())
        
    
    return name
    
)

上面的脚本只是返回一个错误

def removeSalutation = udf[String, String]((name: String) => 

    val salutationList = List("MRS", "MR", "MSTR", "MISS", "MS", "DR")

    for(salutation <- salutationList)
        if(name.endsWith(salutation))
            return name.dropRight(salutation.length())
        
    
    return name
    
) 

上面的脚本一直在说:

错误:方法 removeSalutation 有返回语句;需要结果类型

指定返回类型的正确方法是什么?

【问题讨论】:

【参考方案1】:

分别定义函数如下:

def _removeSalutation(name: String) : String = 
    val salutationList = List("MRS", "MR", "MSTR", "MISS", "MS", "DR")
    for(salutation <- salutationList)
        if(name.endsWith(salutation))
            return name.dropRight(salutation.length())
        
    
    return name


val removeSalutation = udf(_removeSalutation _)

【讨论】:

谢谢,这个有效。我试图一次完成所有事情,即没有你添加的最后一行,但似乎不可能 @IgnacioAlorre 见this。 Return 不应该在 Scala 的 lambda 函数中使用。 我知道,也没有循环,实际上我从这个问题开始。但在这种情况下,我并没有遵循纯粹的函数式编程模式 @IgnacioAlorre 再看一遍,我认为 UDF 可能没有必要...为什么不使用 replace...? @IgnacioAlorre 这就是美元符号的作用——它表示正则表达式中的行尾

以上是关于方法 my_udf 有返回语句;需要结果类型的主要内容,如果未能解决你的问题,请参考以下文章

生成器

生成器

java基础02

方法和数组

python

java学习第五天