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
Libérer: 2024-12-20 13:36:11
original
1042 Les gens l'ont consulté

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal