Regroupement et agrégation de données avec plusieurs colonnes
Lorsque vous utilisez la méthode groupBy de Spark DataFrame, vous pouvez effectuer des opérations d'agrégation sur des colonnes spécifiques pour résumer vos données . Cependant, le DataFrame résultant n'inclura que la colonne groupée et le résultat agrégé.
Pour résoudre cette limitation et récupérer des colonnes supplémentaires avec l'agrégation, envisagez les solutions suivantes :
Utiliser Premier ou dernier agrégats
Une approche consiste à utiliser les fonctions d'agrégation first() ou last() pour inclure des colonnes supplémentaires dans votre DataFrame regroupé. Par exemple :
df.groupBy(df("age")).agg(Map("name" -> "first", "id" -> "count"))
Cette requête créera un DataFrame avec trois colonnes : "age", "name" et "count(id)." La colonne "nom" contient la première valeur de chaque groupe d'âge et la colonne "count(id)" contient le nombre de valeurs "id" pour chaque groupe d'âge.
Rejoindre les résultats agrégés
Une autre solution consiste à joindre le DataFrame agrégé au DataFrame d'origine en utilisant la colonne groupée comme clé de jointure. Cette approche préserve toutes les colonnes de votre DataFrame d'origine :
val aggregatedDf = df.groupBy(df("age")).agg(Map("id" -> "count")) val joinedDf = aggregatedDf.join(df, Seq("age"), "left")
Le DataFrame résultant "joinedDf" contiendra toutes les colonnes du DataFrame d'origine, ainsi que l'agrégation "count(id)" du DataFrame groupé.
Utiliser la fenêtre Fonctions
Enfin, vous pouvez également utiliser des fonctions de fenêtre pour émuler le comportement souhaité de groupBy avec des colonnes supplémentaires. Voici un exemple :
df.withColumn("rowNum", row_number().over(Window.partitionBy("age"))) .groupBy("age").agg(first("name"), count("id")) .select("age", "name", "count(id)")
Cette requête crée une fonction de fenêtre pour attribuer un numéro de ligne à chaque enregistrement au sein de chaque tranche d'âge. Il utilise ensuite ce numéro de ligne pour récupérer la première occurrence de « nom » pour chaque groupe d'âge, ainsi que l'agrégation « count(id) ».
Le choix de l'approche dépend des exigences spécifiques et des considérations de performances de votre candidature.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!