我有兩種方法可以udf在 pyspark 中使用:
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. 為什么只需要第一種情況?
你能幫我澄清這些疑惑嗎?
uj5u.com熱心網友回復:
spark.udf.register用于注冊要在 Spark SQL 查詢中呼叫的 UDF。Whilepyspark.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|
# --- ---
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/394039.html
標籤:阿帕奇火花 火花 apache-spark-sql 用户定义函数
上一篇:EMREKS無法啟動驅動程式艙
