Maison > base de données > tutoriel mysql > Comment conserver des colonnes supplémentaires dans les opérations Spark DataFrame GroupBy ?

Comment conserver des colonnes supplémentaires dans les opérations Spark DataFrame GroupBy ?

Susan Sarandon
Libérer: 2024-12-25 02:11:17
original
545 Les gens l'ont consulté

How to Preserve Additional Columns in Spark DataFrame GroupBy Operations?

Conservation de colonnes supplémentaires dans les opérations Spark DataFrame GroupBy

Dans les requêtes Spark DataFrame groupBy, il est courant de récupérer uniquement les colonnes et les agrégats liés au groupe . Cependant, il peut y avoir des scénarios dans lesquels vous avez l'intention de conserver des colonnes supplémentaires au-delà de la clé de groupe et des résultats de la fonction d'agrégation.

Considérez l'opération groupBy suivante :

df.groupBy(df("age")).agg(Map("id" -> "count"))
Copier après la connexion

Cette requête renverra un DataFrame avec seulement deux colonnes : "age" et "count(id)". Si vous avez besoin de colonnes supplémentaires du DataFrame d'origine, telles que « nom », vous pouvez utiliser plusieurs approches.

Approche 1 : joindre les résultats agrégés à la table d'origine

Une La méthode consiste à joindre le DataFrame avec les résultats agrégés pour récupérer les colonnes manquantes. Par exemple :

val agg = df.groupBy(df("age")).agg(Map("id" -> "count"))
val result = df.join(agg, df("age") === agg("age"))
Copier après la connexion

Cette technique préserve toutes les colonnes du DataFrame d'origine mais peut être moins efficace pour les grands ensembles de données.

Approche 2 : Agréger avec des fonctions supplémentaires (premier/dernier )

Vous pouvez également utiliser des fonctions d'agrégation supplémentaires comme premier ou dernier pour inclure des colonnes non-groupe dans l'agrégation. résultats. Par exemple :

df.groupBy(df("age")).agg(Map("id" -> "count", "name" -> "first"))
Copier après la connexion

Cela renverra un DataFrame avec trois colonnes : "age", "count(id)" et "first(name)."

Approche 3 : Fonctions de fenêtre Where Filter

Dans certains cas, vous pouvez exploiter les fonctions de fenêtre combinées à un filtre Where pour obtenir le résultat souhaité. Cependant, cette approche peut avoir des implications en termes de performances :

df.select(
  col("name"),
  col("age"),
  count("id").over(Window.partitionBy("age").rowsBetween(Window.unboundedPreceding, Window.currentRow))
).where(col("name").isNotNull)
Copier après la connexion

En employant ces techniques, vous pouvez conserver efficacement des colonnes supplémentaires lors de l'exécution d'opérations groupBy dans Spark DataFrames, en répondant à diverses exigences analytiques.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal