pyspark中udf传参数

以一个简单的例子介绍如何使用udf进行参数的传递:

  1. 首先创建一个简单的dataframe
df = spark.createDataFrame([
        (1, 100, 320),
        (2, 135, 400),
        (3, 140, 380),
        (4, 120, 500),
        (5, 130, 300),
        
    ], ['id', 'area', 'price'])

这个dataframe有三列,id,area,price,目的是对area和price进行归一化,假设已经知道area与price的最大值与最小值:

area_max = 140
area_min = 100
price_max = 500
price_min = 300

定义udf函数如下:

def normalize_process(maxValue, minValue):
    
    def process(value, max_value, min_value):
        if max_value - min_value == 0:
            return 0
        else:
            return float(value - min_value) / (max_value - min_value)

    return F.udf(lambda x: process(x, maxValue, minValue))
df = df \
    .withColumn("area_norm", normalize_process(area_max, area_min)(F.col("area"))) \
    .withColumn("price_norm", normalize_process(price_max, price_min)(F.col("price")))

df.show()


		id		area		price	  area_norm		price_norm
		1		100.0		320.0		0.000		0.1
		2		135.0		400.0		0.875		0.5
		3		140.0		380.0		1.000		0.4
		4		120.0		500.0		0.500		1.0
		5		130.0		300.0		0.750		0.0 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值