Pratique : créer une UDF
Il arrive que vos données nécessitent une transformation qui n'est pas offerte par les fonctions intégrées. Dans ce cas, une fonction définie par l'utilisateur (UDF) convient très bien.
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, où chaque tableau a un seul élément. Vous souhaitez transformer cette colonne en une chaîne de caractères.
Cette activité fait partie du cours
Introduction à Spark SQL en Python
Instructions de l’exercice
- Créez une UDF qui retourne vrai si et seulement si la valeur est un vecteur non vide, en utilisant
numNonzeros(). - Créez une UDF qui retourne le premier élément du tableau et renvoie sa représentation sous forme de chaîne.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# 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 '', ____())