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 ?
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 :
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"))
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!