方法 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 有返回语句;需要结果类型的主要内容,如果未能解决你的问题,请参考以下文章