在使用PySpark
的DataFrame
处理数据时,会遇到需要用自定义函数(user defined function, udf)对某一列或几列进行运算,生成新列的情况。PySpark
的udf
使用方法如下。
先初始化SparkContext和SparkSession
from pyspark import SparkConf
from pyspark import SparkContext
from pyspark.sql import SparkSession
spark_conf = SparkConf().setAppName("udf_example")
spark_context = SparkContext(conf=spark_conf)
spark = SparkSession.builder.config(conf=spark_conf).enableHiveSupport().getOrCreate()
使用装饰器的方法把一个python函数注册为udf
from pyspark.sql.types import IntegerType
from pyspark.sql.functions import udf
# 使用装饰器把一个python函数注册为udf, 装饰器中的参数为返回的数据类型
@udf('int')
def slen(s):
if s is not None:
return len(s)
# 当装饰器不带任何参数时,默认的数据类型为str
@udf()
def to_upper(s):
if s is not None:
return s.upper()
# 也可以使用pyspark.sql.types作为装饰器的参数指定udf返回类型
@udf(IntegerType(