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
Susan Sarandonoriginal
2024-12-25 02:11:17553parcourir

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"))

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"))

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"))

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)

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!

Déclaration:
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