首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用注释激发UDF

使用注释激发UDF
EN

Stack Overflow用户
提问于 2021-12-03 20:05:54
回答 1查看 422关注 0票数 0

试图理解如何在spark中使用注释(@ udf )注册udf,但没有得到任何结果,但如果我使用spark.udf.register,它会工作。

代码语言:javascript
复制
from pyspark.sql.types import *
from pyspark.sql.functions import *
from pyspark.sql import *

spark = SparkSession.builder.appName('SparkByExamples.com').getOrCreate()
def to_date_format_udf(d_str):
  l = [char for char in d_str]
  return "".join(l[0:2]) + "/" +  "".join(l[2:4]) + "  " +"".join(l[4:6]) + ":" + " 
   ".join(l[6:])
spark.udf.register("to_date_format_udf", to_date_format_udf, StringType())
str="02190925"
print(to_date_format_udf(str))

通过这段代码,我得到了预期的结果:

代码语言:javascript
复制
2/19  09:25

但是当我试图跟踪@udf上的databricks文档时

我得到以下结果:

代码语言:javascript
复制
Column<b'to_date_format_udf(02190925)'>

下面是对databricks文档的修改:

代码语言:javascript
复制
@udf(returnType=StringType())
def to_date_format_udf(d_str):
 l = [char for char in d_str]
 return "".join(l[0:2]) + "/" +  "".join(l[2:4]) + "  " +"".join(l[4:6]) + ":" + "".join(l[6:])

print(to_date_format_udf("02190925"))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-03 20:38:40

在第一种情况下,结果是预期的输出,因为输入直接应用于函数UDF根本不被调用,调用被视为一个普通的python调用。

然而,注释@udf (通常也称为decorators )修改了to_date_format_udf的行为,从而使其返回一个表达式,该表达式将在执行某个操作时由火花计算。

在这两种情况下,调用spark.sql('select to_date_format_udf("02190925")').show()都会产生相同的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70220094

复制
相关文章

相似问题

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