首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何注册自定义项在SQL和DataFrame中使用?

如何注册自定义项在SQL和DataFrame中使用?
EN

Stack Overflow用户
提问于 2017-04-19 08:25:38
回答 2查看 20.4K关注 0票数 7

据我所知,为了做到这一点,你必须

对于使用SQLContext function

  • register

  • 的函数,使用SQLContextfunction

  • register SQL使SQLContext作为简单的函数

spark.sqlContext.udf.register("myUDF",myFunc)

  • 将其转换为UserDefinedFunction

DataFrame

def myUDF = udf(myFunc)

有没有办法将这一步合并到一个步骤中,使udf对这两个步骤都可用?此外,对于存在用于DataFrame但不用于SQL的函数的情况,如何在不再次复制代码的情况下注册它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-19 08:31:35

带有scala.FunctionNUDFRegistration.register变体返回一个UserDefinedFunction,这样您就可以在单个步骤中注册SQL函数并创建DSL友好的UDF:

代码语言:javascript
复制
val timesTwoUDF = spark.udf.register("timesTwo", (x: Int) => x * 2)
spark.sql("SELECT timesTwo(1)").show
代码语言:javascript
复制
+---------------+
|UDF:timesTwo(1)|
+---------------+
|              2|
+---------------+
代码语言:javascript
复制
spark.range(1, 2).toDF("x").select(timesTwoUDF($"x")).show
代码语言:javascript
复制
+------+
|UDF(x)|
+------+
|     2|
+------+
票数 14
EN

Stack Overflow用户

发布于 2017-11-22 09:56:12

您可以使用以下代码,并仍然将其应用于dataframe

代码语言:javascript
复制
spark.sqlContext.udf.register("myUDF", myFunc)

在对数据帧转换调用selectExpr时使用它。

代码语言:javascript
复制
df.selectExpr("myUDF(col1) as modified_col1")
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43484269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档