来自 SparkSession 的 udf 和来自 pyspark.sql.functions 的 udf 有什么区别
what is the difference between udf from SparkSession and udf from pyspark.sql.functions
我有两种在pyspark中使用udf
的方法:
1.
spark = pyspark.sql.SparkSession.builder.getOrCreate()
print(spark.udf)
output:
<pyspark.sql.udf.UDFRegistration at 0x7f5532f823a0>
from pyspark.sql.functions import udf
print(udf)
output:
<function pyspark.sql.functions.udf(f=None, returnType=StringType)>
我不明白两者之间的预期区别是什么。我怀疑为什么有两个 API 可用。spark.udf
有一个名为 register 的方法可用。我认为注册一个 udf
是必要的。那么,为什么它在pyspark.sql.functions
中不可用。为什么只有第一种情况需要它?
能帮我解开这些疑惑吗?
spark.udf.register
用于注册要在 Spark SQL 查询中调用的 UDF。而 pyspark.sql.functions.udf
用于创建在使用 DataFrame API 时调用的 UDF。
注册 UDF 并与 SQL
一起使用
from pyspark.sql.types import LongType
df = spark.range(1, 5)
df.createOrReplaceTempView("tb")
def plus_one(v):
return v + 1
spark.udf.register("plus_one_udf", plus_one, LongType())
spark.sql("select id, plus_one_udf(id) as id2 from tb").show()
#+---+---+
#| id|id2|
#+---+---+
#| 1| 2|
#| 2| 3|
#| 3| 4|
#| 4| 5|
#+---+---+
与 DataFrame 一起使用 API
import pyspark.sql.functions as F
plus_one_udf = F.udf(plus_one, LongType())
df.withColumn("id2", plus_one_udf(F.col("id"))).show()
#+---+---+
#| id|id2|
#+---+---+
#| 1| 2|
#| 2| 3|
#| 3| 4|
#| 4| 5|
#+---+---+
我有两种在pyspark中使用udf
的方法:
1.
spark = pyspark.sql.SparkSession.builder.getOrCreate()
print(spark.udf)
output:
<pyspark.sql.udf.UDFRegistration at 0x7f5532f823a0>
from pyspark.sql.functions import udf
print(udf)
output:
<function pyspark.sql.functions.udf(f=None, returnType=StringType)>
我不明白两者之间的预期区别是什么。我怀疑为什么有两个 API 可用。spark.udf
有一个名为 register 的方法可用。我认为注册一个 udf
是必要的。那么,为什么它在pyspark.sql.functions
中不可用。为什么只有第一种情况需要它?
能帮我解开这些疑惑吗?
spark.udf.register
用于注册要在 Spark SQL 查询中调用的 UDF。而 pyspark.sql.functions.udf
用于创建在使用 DataFrame API 时调用的 UDF。
注册 UDF 并与 SQL
一起使用from pyspark.sql.types import LongType
df = spark.range(1, 5)
df.createOrReplaceTempView("tb")
def plus_one(v):
return v + 1
spark.udf.register("plus_one_udf", plus_one, LongType())
spark.sql("select id, plus_one_udf(id) as id2 from tb").show()
#+---+---+
#| id|id2|
#+---+---+
#| 1| 2|
#| 2| 3|
#| 3| 4|
#| 4| 5|
#+---+---+
与 DataFrame 一起使用 API
import pyspark.sql.functions as F
plus_one_udf = F.udf(plus_one, LongType())
df.withColumn("id2", plus_one_udf(F.col("id"))).show()
#+---+---+
#| id|id2|
#+---+---+
#| 1| 2|
#| 2| 3|
#| 3| 4|
#| 4| 5|
#+---+---+