当前位置: 首页 > 知识库问答 >
问题:

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

韦俊英
2023-03-14

我读到在大多数情况下不需要为udf指定返回类型,但如果您添加返回语句,那么它是必要的。

我有以下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
    
}) 

上面的剧本一直在说:

错误:方法删除别名有返回语句;需要结果类型

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

共有1个答案

黄淇
2023-03-14

如下分别定义函数:

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 _)
 类似资料:
  • 问题内容: 这仅返回结果,我需要返回全部89%。有任何想法如何做吗? 问题答案: 简单的解决方案: 更漂亮的解决方案: 最漂亮的解决方案:

  • 问题内容: 已经晚了,所以这一定是愚蠢的。我已将LinqPad连接到我的数据库,但似乎无法获得最简单查询的结果。 当我运行它时,LinqPad说它成功执行了(C#语句模式)。什么都不会被搁置。 我可以编写以下非常简单的Lambda(C#表达式模式): 那行得通。为什么?我更喜欢使用非lambda查询构建功能。我敢肯定,这一切都是愚蠢的。 问题答案: 我希望在声明模式下,您必须执行类似call的操作

  • 问题内容: 我有一张桌子,里面有人和他们拥有的汽车 该查询为我提供了和拥有完全相同的汽车以及Lisa本人的人,这很好。 结果: 如果我想查找所有拥有相同汽车的人,请重新运行查询,结果应为我。 现在,我有一个Java名称列表,对于每个名称,我都运行此查询。真的很慢。无论如何,是否可以找到所有拥有相同汽车的人,并在单个数据库调用中将结果划分为组? 例如,使用第一个表。我可以运行将名称分组的查询。请注意

  • 我在Java中所知的程度可以通过两种方式报告错误:返回值和异常。例如,下面的代码: 另一个观察结果是:如果取消对最后一条“return result”语句的注释,则会得到一条错误消息: 变量结果可能未初始化 ;如果对最后一条“return result”进行注释,则会得到一条错误消息: 缺少return语句 但是我已经在try子句中包含了return语句。

  • 问题内容: 函数内部的这两个语句之间有区别吗? 还有这个? 前者周围有括号。 问题答案: 从C 14开始,它们经常是。C 14增加了一种边缘情况,其中返回值周围的括号可能会改变语义。此代码段显示了要声明的两个函数。唯一的区别是在返回值两边加上括号。 在第一个中func1返回int,在第二个中func1返回int&。语义上的差异与周围的括号直接相关。 autoC 11中引入了最新形式的说明符。在C