赞
踩
以一个简单的例子介绍如何使用udf进行参数的传递:
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。