Maison > base de données > tutoriel mysql > Comment puis-je conserver toutes les colonnes lors de l'agrégation de données dans un Spark DataFrame à l'aide de groupBy ?

Comment puis-je conserver toutes les colonnes lors de l'agrégation de données dans un Spark DataFrame à l'aide de groupBy ?

DDD
Libérer: 2024-12-22 16:27:11
original
412 Les gens l'ont consulté

How can I retain all columns when aggregating data in a Spark DataFrame using groupBy?

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"))
Copier après la connexion

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")
Copier après la connexion

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)")
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal