pyspark中自定义函数比python中多了一部注册,整体流程是“定义-注册-调用”,其中注册和调用两步在sparksql和DSL中又有所区别,具体如下:
from pyspark.sql import SparkSession
第一步定义一个函数:
def squared_func(number):
return number *number
这一步和在python中是一样的。
#创建一个临时表,用于后边测试函数
spark.range(1,20).registerTempTable("tmp_test")
第二步和第三步:
(1)在spark sql中
# 用spark.udf.register注册函数
from pyspark.sql.types import LongType #导入LongType数据类型包
spark.udf.register('func_squared_type',squared_func,returnType=LongType())
spark.udf.register有三个参数:
1、注册后的函数名称,字符串
2、已经定义好的函数,这里用第一步里边的squared_func
3、返回的数据类型,默认是字符串类型,这里设置为LongType(),注意不要忘记括号。
#或者直接用lambda定义并注册函数
spark.udf.register('func_squared