PySpark UDF: appliquer une fonction Python
objectif
Expliquer et montrer comment créer un UDF scalaire et l’appliquer à une colonne.
code minimal
from pyspark.sql import functions as F, types as T
@F.udf(returnType=T.IntegerType())
def safe_len(s):
if s is None:
return 0
return len(s)
df2 = df.withColumn("name_len", safe_len(F.col("name")))
utilisation
# préférer les fonctions natives quand possible (F.length) pour performance
variante(s) utile(s)
# Pandas UDF (vectorisé) souvent beaucoup plus rapide
from pyspark.sql.functions import pandas_udf, PandasUDFType
@pandas_udf("double", PandasUDFType.SCALAR)
def zscore(col):
import pandas as pd
return (col - col.mean()) / col.std(ddof=0)
notes
- Les UDF Python cassent la vectorisation JVM -> privilégier functions natives.
- Pandas UDF requiert Arrow activé.