Maison >base de données >tutoriel mysql >Comment effectuer efficacement une agrégation groupée Top-N dans Spark DataFrames ?
Comment effectuer une agrégation TopN groupée à l'aide de Spark DataFrame
Dans Spark SQL, vous pouvez exploiter la syntaxe de type SQL pour effectuer des manipulations de données complexes. Une tâche courante consiste à regrouper les données et à récupérer les N premières valeurs de chaque groupe. Voici comment y parvenir à l'aide d'un Spark DataFrame :
Pour regrouper les données par colonne spécifique, spécifiez le nom de la colonne dans la clause GROUP BY :
<br>df. groupBy("user")<br>
Pour trier les résultats au sein de chaque groupe, vous pouvez utiliser le Fonction orderBy :
<br>df.groupBy("user").orderBy(desc("rating"))<br>
Cela permettra trier les données par ordre décroissant de la colonne de notation pour chaque groupe d'utilisateurs.
Pour récupérer uniquement les N premiers enregistrements de chaque group, vous pouvez utiliser la fonction limite :
<br>df.groupBy("user").orderBy(desc("rating")).limit(n)<br>< /pre></p> <p>Où n est le nombre souhaité d'enregistrements les plus importants à récupérer.</p> <p>Alternativement, vous peut utiliser des fonctions de fenêtre pour classer les enregistrements dans chaque groupe, puis filtrer en fonction du classement :</p> <p><pre class="brush:php;toolbar:false"><br>import org.apache.spark.sql.expressions.Window<br>import org. apache.spark.sql.functions.{rank, desc}</p> <p>// Définition de la fenêtre<br>val w = Window.partitionBy($"user").orderBy(desc("rating"))</p> <p>// Filter<br>df.withColumn("rank", Rank.over(w)).where($ "rank" <= n)<br>
Notez que si vous ne vous souciez pas des égalités, vous pouvez remplacer la fonction de classement par la fonction row_number.
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!