Maison > base de données > tutoriel mysql > Comment conserver les colonnes non agrégées après un Spark DataFrame GroupBy ?

Comment conserver les colonnes non agrégées après un Spark DataFrame GroupBy ?

Susan Sarandon
Libérer: 2024-12-31 14:33:11
original
373 Les gens l'ont consulté

How to Keep Non-Aggregated Columns After a Spark DataFrame GroupBy?

Comment conserver les colonnes non agrégées dans Spark DataFrame GroupBy

Lors de l'agrégation de données à l'aide de la méthode groupBy de DataFrame, le DataFrame résultant contient uniquement le groupe -par clé et les valeurs agrégées. Cependant, dans certains cas, il peut être souhaitable d'inclure également des colonnes non agrégées du DataFrame d'origine dans le résultat.

Limitation de Spark SQL

Spark SQL suit la convention du SQL antérieur à 1999, qui n'autorise pas de colonnes supplémentaires dans les requêtes d'agrégation. Les agrégations telles que count produisent des résultats qui ne sont pas bien définis lorsqu'elles sont appliquées à plusieurs colonnes, de sorte que différents systèmes traitant de telles requêtes présentent des comportements variables.

Solution :

Pour préserver non -colonnes agrégées dans un groupe Spark DataFrame, il existe plusieurs options :

  1. Rejoindre l'original DataFrame : Joignez le DataFrame agrégé au DataFrame d'origine pour ajouter les colonnes manquantes.
val aggregatedDf = df.groupBy(df("age")).agg(Map("id" -> "count"))
val joinedDf = aggregatedDf.join(df, Seq("age"), "left")
Copier après la connexion
  1. Utiliser les fonctions de fenêtre : Utilisez les fonctions de fenêtre comme first ou dernier à inclure des colonnes supplémentaires dans la requête d'agrégation. Cependant, cette approche peut être coûteuse en calcul dans certains scénarios.
import org.apache.spark.sql.expressions.Window
val windowSpec = Window.partitionBy(df("age"))
val aggregatedDf = df.withColumn("name", first(df("name")).over(windowSpec))
  .groupBy(df("age")).agg(Map("id" -> "count"))
Copier après la connexion

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