Maison >base de données >tutoriel mysql >Comment puis-je inclure des colonnes supplémentaires dans mon Spark DataFrame après une opération GroupBy ?

Comment puis-je inclure des colonnes supplémentaires dans mon Spark DataFrame après une opération GroupBy ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-30 10:29:08483parcourir

How Can I Include Additional Columns in My Spark DataFrame After a GroupBy Operation?

Moyens alternatifs d'obtenir des colonnes supplémentaires dans Spark DataFrame GroupBy

Lorsque vous effectuez des opérations groupBy sur un Spark DataFrame, vous pouvez rencontrer le problème de seulement récupérer la colonne de regroupement et le résultat de la fonction d'agrégation, en laissant de côté les autres colonnes de l'original DataFrame.

Pour résoudre ce problème, vous pouvez envisager deux approches principales :

  1. Joindre les résultats agrégés au tableau d'origine :

Spark SQL adhère aux conventions antérieures à SQL : 1999, interdisant l'inclusion de colonnes supplémentaires dans les requêtes d'agrégation. Par conséquent, vous pouvez agréger les données requises et les joindre ensuite au DataFrame d'origine. Ceci peut être réalisé en utilisant les méthodes selectExpr et join, comme indiqué ci-dessous :

// Aggregate the data
val aggDF = df.groupBy(df("age")).agg(Map("id" -> "count"))

// Rename the aggregate function's result column for clarity
val renamedAggDF = aggDF.withColumnRenamed("count(id)", "id_count")

// Join the aggregated results with the original DataFrame
val joinedDF = df.join(renamedAggDF, df("age") === renamedAggDF("age"))
  1. Utilisation des fonctions de fenêtre :

Alternativement, vous pouvez utilisez les fonctions de fenêtre pour calculer des colonnes supplémentaires et les conserver dans le DataFrame groupé. Cette méthode consiste principalement à définir un cadre de fenêtre sur la colonne de regroupement et à appliquer une fonction d'agrégation pour récupérer les données souhaitées.

// Get the row number within each age group
val window = Window.partitionBy(df("age")).orderBy(df("age"))

// Use the window function to calculate the cumulative count of ids
val dfWithWindow = df.withColumn("id_count", count("id").over(window))

Une fois que vous aurez utilisé ces techniques, vous pourrez récupérer les colonnes supplémentaires nécessaires tout en effectuer des opérations groupBy sur votre Spark DataFrame.

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