Maison > base de données > tutoriel mysql > Comment trouver efficacement les N principaux éléments par groupe dans un Spark DataFrame ?

Comment trouver efficacement les N principaux éléments par groupe dans un Spark DataFrame ?

Barbara Streisand
Libérer: 2024-12-25 22:55:17
original
830 Les gens l'ont consulté

How to Efficiently Find the Top N Items per Group in a Spark DataFrame?

Regroupement et TopN avec Spark DataFrame

Introduction :
Spark DataFrame fournit des fonctionnalités puissantes pour manipuler et agréger des données. Regrouper les données en fonction de colonnes spécifiques, puis effectuer des opérations au sein de chaque groupe, telles que trouver les N premières valeurs, est une exigence courante dans le traitement des données.

Énoncé du problème :
Envisagez un Spark DataFrame avec des colonnes telles que utilisateur, élément et note. La tâche consiste à regrouper les données par utilisateur et à renvoyer les N premiers éléments de chaque groupe, où N est un nombre prédéfini.

Solution :

Utilisation Fonctions de la fenêtre :

Scala code :

import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions.{rank, desc}

val n: Int = ???

// Window definition
val w = Window.partitionBy($"user").orderBy(desc("rating"))

// Filter
df.withColumn("rank", rank.over(w)).where($"rank" <= n)
Copier après la connexion

Explication :
Ce code utilise des fonctions de fenêtre pour classer les éléments au sein de chaque groupe d'utilisateurs en fonction de la colonne de notation par ordre décroissant. La fonction de classement attribue un rang à chaque ligne de la partition, indiquant sa position dans la liste triée. En filtrant sur le rang <= n, seuls les N premiers éléments de chaque groupe sont conservés.

Utilisation de la fonction row_number :

Si vous n'avez pas besoin de gérer liens (cas où plusieurs éléments ont le même rang), vous pouvez utiliser row_number au lieu de Rank. Le code reste similaire à celui ci-dessus, avec row_number.over(w) remplaçant Rank.over(w) dans l'expression withColumn.

En tirant parti de ces techniques de regroupement et de fenêtrage, vous pouvez trouver efficacement les N premiers éléments dans chaque groupe de votre Spark DataFrame, vous permettant d'extraire efficacement des informations précieuses de vos données.

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!

source:php.cn
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