pyspark-03 UDF和Pandas_UDF

本文介绍了PySpark中处理数据的两种自定义函数:UDF(用户定义函数)和Pandas_UDF。UDF针对单行数据操作,而Pandas_UDF则作用于Series,支持更高效的列级操作。通过示例展示了如何定义和应用这些函数,包括计算平方根、计算平均值差和进行模型预测。Pandas_UDF在效率和模型预测方面具有优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录


udf

pyspark里面常常需要自定义函数进行数据处理

  1. udf是针对一行数据进行处理
  2. pandas_udf是针对一个series进行处理
  3. udfa是针对groupby之后的数据进行处理

应用类似于pandas里面的apply函数,

import numpy as np
from pyspark.sql import SparkSession
import pyspark.sql.functions as F
from pyspark.sql.types import StringType, FloatType

pandas_df = pd.DataFrame({
   
   'row_number': np.arange(100000)})
spark_df = spark.createDataFrame(pandas_df) 
spark_df.show(5)
+----------+
|row_number|
+----------+
|         0|
|         1|
|         2|
|         3|
|         4|
+----------+

# 定义udf函数,开根号
@F.udf(returnType=FloatType())
def cacl_sqrt(x):
    return float(np.sqrt(x))
 spark_df.withColumn('a2', cacl_sqrt('row_number')).show()
 
 +----------+---------+
|row_number|       a2|
+----------+---------+
|         0|      0.0|
|         1|      1.0|
|         2|1.4142135|
|         3|1.7320508|
|         4|      2.0|

  • udf传入的参数x,就是row_number列里每一行数据
  • udf默认返回是string,returnType建议指定好返回类型
  • udf不支持numpy格式数据,需要转为基本类型float(np.sqrt(x))

聚合后结合collect_list使用udf,实现udaf功能

rdd = spark.sparkContext.parallelize([
    (1, 2., 'sdsd|sdsd:sdsd', date(2000, 1, 1), datetime(2000, 1, 1, 12, 0)),
    (1, 3., '20202_19001', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)),
    (1, 3., '20202_19001', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)),
    (1, 3., '20202_19001', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)),
    (1, 3., '20202_19001', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)),<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值