-
背景
如果pyspark自带的方法不能满足数据处理的需要时,可自定义UDF方法。 -
UDF建立
from pyspark.sql.functions import udf
# 定义udf方法
def mySum(value):
x = value+1
return x
# 定义返回数据类型
mySum = udf(mySum, FloatType())
- 利用自定义UDF处理DataFrame
## df中每列值+1
df_new = df.select([mySum(c) for c in df.columns])
注意: 不能与Nontype相加,需要提前补充缺失值
- 列表生成+ if +else:
# 获取特征数值类型
def colType(df):
df_dtypes = df.dtypes
col_dtypes = {} # 特征列名与特征类型字典
for i in range(len(df_dtypes)):
col_dtypes[df_dtypes[i][0]] = df_dtypes[i][1]
return col_dtypes
col_dtypes = colType(df)
## df中如果数值类型是float, double 则值+1, 否则不变。
df_new = df.select([ mySum(c).alias(c) if (col_dtypes[c] == 'float') | (col_dtypes[c] == 'double') else c for c in df.columns ])