当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。