Maison >base de données >tutoriel mysql >Comment puis-je conserver d'autres colonnes lors d'un regroupement dans un Spark DataFrame ?

Comment puis-je conserver d'autres colonnes lors d'un regroupement dans un Spark DataFrame ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-21 01:01:09486parcourir

How Can I Keep Other Columns When Grouping in a Spark DataFrame?

Préserver les autres colonnes lors du regroupement dans Spark DataFrame

Lors de l'exécution d'une opération de regroupement DataFrame, il est courant de rencontrer le problème de ne recevoir que les éléments groupés colonnes et les valeurs agrégées. Cela peut être gênant si vous devez conserver d'autres colonnes du DataFrame d'origine.

Par exemple, considérez le groupby suivant :

df.groupBy(df("age")).agg(Map("id" -> "count"))

Cela renverra un DataFrame contenant uniquement "l'âge" et les colonnes "count(id)". Cependant, si « nom » et d'autres colonnes existent dans le DataFrame d'origine, vous souhaiterez peut-être les inclure dans le résultat.

En SQL standard, cela peut être réalisé en utilisant la requête suivante :

select name, age, count(id) from df group by age

Pour reproduire ce comportement dans Spark, vous pouvez joindre les résultats agrégés au tableau d'origine. La ou les colonnes clés pour la jointure doivent être les mêmes que la ou les colonnes groupby.

Voici un exemple utilisant Spark SQL :

val groupedDf = df.groupBy($"age").agg(count($"id").as("count"))
val joinedDf = df.join(groupedDf, Seq("age"), "left")

Le joinDf contiendra désormais tous les colonnes d'origine ainsi que la colonne "compte" agrégée.

Une autre approche consiste à utiliser des agrégats arbitraires comme le premier ou le dernier pour inclure des colonnes supplémentaires. Par exemple :

val groupedDf = df.groupBy($"age").agg(first($"name").as("name"), count($"id").as("count"))

Cela garantira que la colonne « nom » est préservée dans le DataFrame agrégé.

Bien que ces méthodes vous permettent de récupérer d'autres colonnes lors du regroupement, il est important de noter que ces requêtes ne sont généralement pas bien définies et peuvent présenter un comportement variable selon les différents systèmes.

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