S’entraîner à créer une UDF
Il arrive que vos données nécessitent une transformation non prise en charge par les fonctions intégrées. C’est là qu’une fonction définie par l’utilisateur ("UDF") est adaptée.
La fonction SQL udf est disponible.
Un dataframe df2 est disponible, de type DataFrame[doc: array<string>, in: array<string>, out: array<string>]. Sa colonne doc contient des jetons simples.
Ce qui suit affiche les 20 premières lignes de df2 où doc contient « 1 » :
df2.where(array_contains('doc','1')).show()
Vous avez deux objectifs à atteindre :
- Veiller à ce que les données transformées soient des vecteurs non vides.
- Un dataframe possède une colonne qui contient des tableaux de chaînes de caractères, où chaque tableau comporte un seul élément. Vous souhaitez transformer cette colonne en une chaîne de caractères.
Cet exercice fait partie du cours
Introduction à Spark SQL en Python
Instructions
- Créez une udf qui renvoie true si et seulement si la valeur est un vecteur non vide, en utilisant
numNonzeros(). - Créez une udf qui renvoie le premier élément du tableau et sa représentation sous forme de chaîne.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# Returns true if the value is a nonempty vector
nonempty_udf = udf(lambda x:
True if (x and hasattr(x, "toArray") and x.____())
else False, ____())
# Returns first element of the array as string
s_udf = udf(lambda x: ____(x[0]) if (x and type(x) is list and len(x) > 0)
else '', ____())