加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在scala中向sqlContext UDF注册函数?

发布时间:2020-12-16 18:45:16 所属栏目:安全 来源:网络整理
导读:我有一个名为getAge(timestamp:Long)的方法,我想将其注册为sql函数. 我有 sqlContext.udf.register("getAge",getAge) 但它告诉我我需要参数或之后使用_,我尝试使用_但是给了我错误.我如何用参数注册它.我是scala的新手,所以我不知道如何做到这一点. 解决方
我有一个名为getAge(timestamp:Long)的方法,我想将其注册为sql函数.

我有

sqlContext.udf.register("getAge",getAge)

但它告诉我我需要参数或之后使用_,我尝试使用_但是给了我错误.我如何用参数注册它.我是scala的新手,所以我不知道如何做到这一点.

解决方法

sqlContext.udf.register("getAge",getAge)

应该:

sqlContext.udf.register("getAge",getAge _)

下划线(必须在函数和下划线之间有空格)将函数转换为可以在注册中传递的部分应用函数.

更多解释

当我们调用一个函数时,我们必须传入所有必需的参数.如果我们不这样做,编译器会抱怨.

然而,我们可以要求它将函数作为一个值,我们可以在以后传递所需的参数.我们如何做到这一点是使用下划线.

getAge意味着运行getAge – 例如,def getAge = 10给我们10.我们不想要结果,我们想要这个函数.此外,根据您的定义,编译器会发现getAge需要一个参数,并抱怨没有给出一个参数.

我们在这里要做的是将getAge作为函数值传递.我们告诉Scala,我们还不知道参数,我们希望函数作为一个值,我们将在以后为它提供所需的参数.所以,我们使用getAge _.

假设getAge的签名是:

getAge(l: Long): Long = <function>

getAge _成为一个匿名函数:

Long => Long = <function>

这意味着它需要一个Long类型的参数,调用它的结果将产生Long类型的值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读