Maison >base de données >tutoriel mysql >Comment trouver efficacement les N principaux éléments par groupe dans un 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)
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!