使用注释的 Spark UDF
Spark UDF using Annotations
试图了解如何在 spark 中使用注释 (@udf) 注册 udf 但没有得到任何结果,但如果我使用 spark.udf.register
它会起作用
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))
使用这段代码我得到了预期的结果:
2/19 09:25
但是当我尝试关注@udf 上的 databricks 文档时
我得到以下结果:
Column<b'to_date_format_udf(02190925)'>
这里是对数据块文档的修改:
@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"))
在第一种情况下,结果是预期的输出,因为输入直接应用于函数 UDF
根本没有被调用,调用被视为正常的 python 调用。
然而,注解 @udf
also generally known as decorators
修改了 to_date_format_udf
的行为,导致它成为 return 一个表达式,在执行操作时将由 Spark 计算。
在两种情况下调用 spark.sql('select to_date_format_udf("02190925")').show()
会产生相同的结果。
试图了解如何在 spark 中使用注释 (@udf) 注册 udf 但没有得到任何结果,但如果我使用 spark.udf.register
它会起作用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))
使用这段代码我得到了预期的结果:
2/19 09:25
但是当我尝试关注@udf 上的 databricks 文档时
我得到以下结果:
Column<b'to_date_format_udf(02190925)'>
这里是对数据块文档的修改:
@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"))
在第一种情况下,结果是预期的输出,因为输入直接应用于函数 UDF
根本没有被调用,调用被视为正常的 python 调用。
然而,注解 @udf
also generally known as decorators
修改了 to_date_format_udf
的行为,导致它成为 return 一个表达式,在执行操作时将由 Spark 计算。
在两种情况下调用 spark.sql('select to_date_format_udf("02190925")').show()
会产生相同的结果。