Les UserDefinedAggregateFunctions permettent d'implémenter vos propres fonctions d'agrégation. Elles n'existent que dans les APIs Java et Scala.
Pour définir une UDAF vous devez créer une classe qui étend la classe abstraite UserDefinedAggregateFunction
du package org.apache.spark.sql.expressions
. Elle implémente 8 méthodes :
inputSchema
: Schéma des données d'entréesbufferSchema
: Schéma des données intermédiairesdataType
: Type des données de sortiesdeterministic
: Booléen àtrue
si les données de sortie sont toujours les mêmes pour un dataset donnéinitialize
: Initialisation des buffers d'agrégationupdate
: Mise à jour des buffers d'agrégationmerge
: Merge des buffers d'agrégationevaluate
: Génération du résultat final
Les exercices sont dans le package fr.xebia.udaf
. Il y a ensuite un package par exercice. Pour chaque UDAF les 8 méthodes sont pré-écrites. Vous n'avez plus qu'à les implémenter. Les solutions se trouvent sur la branche solution
.
Dans le package example
vous avez un exemple de l'implémentation du calcul d'une moyenne avec une UDAF.
Implémentez une UDAF qui calcule le maximum d'une colonne.
Implémentez une UDAF qui calcule la moyenne géométrique d'une colonne. Pour une série x1, ... , xn
de nombres, la moyenne géométrique se calcul de la façon suivante :
Implémentez une UDAF qui calcule l'écart type d'une colonne. Pour une série x1, ... , xn
de nombres, l'écart type se calcul de la façon suivante :
Où μ est la moyenne de la série
Implémentez une UDAF qui calcule le skewness (l'asymétrie) d'une colonne. Pour une série x1, ... , xn
de nombres, le skewness se calcul de la façon suivante :
Où μ est la moyenne de la série
Implémentez une UDAF qui calcule le kurtosis (l'aplatissement) d'une colonne. Pour une série x1, ... , xn
de nombres, le kurtosis se calcul de la façon suivante :
Où μ est la moyenne de la série