pyspark 自定义函数

一:自定义函数的一般流程

# 1.创建普通的python函数

def to_upper(s):
        if s is not None:
            return s.upper()

# 2.注册自定义函数
from pyspark.sql.functions import udf
from pyspark.sql.types import StringType

# 根据python的返回值类型定义好spark对应的数据类型
# python函数中返回的是string,对应的pyspark是StringType
toDateUDF=udf(to_upper, StringType())  

# 使用自定义函数
df1.withColumn('color',toDateUDF('color')).show()
 

二:简单的自定义函数
最简单的就是通过lambda函数,不需要定义返回值类型,可以直接使用

slen = udf(lambda s: len(s), IntegerType())#这里用匿名函数

三:自定义函数,需要定义返回值类型

slen = udf(lambda s: len(s), IntegerType())#这里用匿名函数
def to_upper(s):
    if s is not None:
        return s.upper()
def add_one(x):
    if x is not None:
        return x + 1
df = spark.createDataFrame([(1, "John Doe", 21)], ("id", "name", "age"))
add_udfs = udf(add_one,IntegerType())#定义返回值类型
df.select(slen('name').alias("slen(name)"),to_upper('name'),add_udfs('age')).show() 

补充:

自定义函数的重点在于定义返回值类型的数据格式,其数据类型基本都是从from pyspark.sql.types import * 导入,常用的包括:

StructType():结构体
StructField():结构体中的元素
LongType():长整型
StringType():字符串
IntegerType():一般整型
FloatType():浮点型

参考:Spark UDF使用详解及代码示例

 

 

 

后来还看到一种方法,试过也可以用:编写udf

from pyspark.sql.types import *
def pow1(m,n):
return float(m)**float(n)
udf = spark.udf
udf.register('pow1',pow1,returnType=DoubleType())
df = spark.range(0,10,2,3)
df.createOrReplaceTempView('A')
spark.sql('select pow1(id,2) from A').show()
spark.sql('select pow1(id,3) from A').show()

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值