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!