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

方法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语句。

  • 问题内容: 我有这种简单的查询,它返回给定id的非空整数字段: 问题是,如果找不到ID,则结果集为空。我需要查询始终返回一个值,即使没有结果也是如此。 我有这个东西工作,但我不喜欢它,因为它运行相同子查询的2倍: 如果该行存在,则返回field1,否则返回0。有什么改进的方法吗? 谢谢! 编辑以下一些评论和答案 :是的,它必须在 单个查询语句中, 并且我不能使用count技巧,因为 我只需要返回1