pyspark之自定义函数操作(七)

自定义函数在PySpark中的应用
本文详细介绍了如何在PySpark中定义和使用自定义函数(UDF),包括基本的自定义函数流程、简单函数的创建及进阶函数的应用。涵盖了数据类型定义、函数注册及在DataFrame上的应用。

1. 概览

自定义函数的重点在于定义返回值类型的数据格式,其数据类型基本都是从from pyspark.sql.types import * 导入,常用的包括:
- StructType():结构体
- StructField():结构体中的元素
- LongType():长整型
- StringType():字符串
- IntegerType():一般整型
- FloatType():浮点型

还记得我们在前面的创建spark.dataframe提到的例子吗,dataframe的数据结构定义如下:

from pyspark.sql.types import StructType, StructField, LongType, StringType
schema = StructType([
    StructField("id", LongType(), True),
    StructField("name", StringType(), True),
    StructField("age", LongType(), True),
    StructField("eyeColor", StringType(), True)
])
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2. 自定义函数的一般流程

# 1.创建普通的python函数
def toDate(s):
    return str(s)+'-'

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

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

# 使用自定义函数
df1.withColumn('color',toDateUDF('color')).show()
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3. 简单的自定义函数

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

# 创建udf自定义函数
from pyspark.sql import functions
concat_func = functions.udf(lambda name,age:name+'_'+str(age))  # 简单的连接两个字符串

# 应用自定义函数
concat_df = spark_df.withColumn("name_age",concat_func(final_data.name, final_data.age))
concat_df.show()
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4. 自定义函数进阶

对于简单的自定义函数,用上面的方法是足够了,但是很多时候,我们面对的问题比较复杂,需要对返回值的格式要求比较特别,就需要定义复杂的返回值类型了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值