Maison >base de données >tutoriel mysql >Comment effectuer efficacement une agrégation groupée Top-N dans Spark DataFrames ?

Comment effectuer efficacement une agrégation groupée Top-N dans Spark DataFrames ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-20 13:36:11976parcourir

How to Efficiently Perform Grouped Top-N Aggregation in 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!

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