當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python pyspark udf用法及代碼示例

本文簡要介紹 pyspark.sql.functions.udf 的用法。

用法:

pyspark.sql.functions.udf(f=None, returnType=StringType)

創建用戶定義函數 (UDF)。

版本 1.3.0 中的新函數。

參數

f函數

python 函數(如果用作獨立函數)

returnType pyspark.sql.types.DataType 或 str

用戶定義函數的返回類型。該值可以是 pyspark.sql.types.DataType 對象或 DDL 格式的類型字符串。

注意

默認情況下,用戶定義的函數被認為是確定性的。由於優化,可以消除重複調用,或者該函數的調用次數甚至可能比查詢中出現的次數多。如果您的函數不是確定性的,請在用戶定義的函數上調用asNondeterministic。例如:

>>> from pyspark.sql.types import IntegerType
>>> import random
>>> random_udf = udf(lambda: int(random.random() * 100), IntegerType()).asNondeterministic()

用戶定義的函數不支持條件表達式或布爾表達式中的短路,最終會全部在內部執行。如果函數在特殊行上失敗,解決方法是將條件合並到函數中。

用戶定義的函數在調用方不采用關鍵字參數。

例子

>>> from pyspark.sql.types import IntegerType
>>> slen = udf(lambda s: len(s), IntegerType())
>>> @udf
... def to_upper(s):
...     if s is not None:
...         return s.upper()
...
>>> @udf(returnType=IntegerType())
... def add_one(x):
...     if x is not None:
...         return x + 1
...
>>> df = spark.createDataFrame([(1, "John Doe", 21)], ("id", "name", "age"))
>>> df.select(slen("name").alias("slen(name)"), to_upper("name"), add_one("age")).show()
+----------+--------------+------------+
|slen(name)|to_upper(name)|add_one(age)|
+----------+--------------+------------+
|         8|      JOHN DOE|          22|
+----------+--------------+------------+

相關用法


注:本文由純淨天空篩選整理自spark.apache.org大神的英文原創作品 pyspark.sql.functions.udf。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。