Maison >base de données >tutoriel mysql >Comment récupérer les N principaux éléments par groupe d'utilisateurs dans un DataFrame Spark SQL à l'aide de Scala ?
Problème :
Étant donné un DataFrame Spark SQL avec des colonnes représentant les utilisateurs , les éléments et les évaluations des utilisateurs, comment pouvons-nous regrouper par utilisateur, puis récupérer les N premiers éléments de chaque groupe en utilisant Scala ?
Réponse :
Pour y parvenir, nous pouvons utiliser la fonction de fenêtre de classement comme suit :
import org.apache.spark.sql.expressions.Window import org.apache.spark.sql.functions.{rank, desc} val n: Int = ??? // Define the window specification val w = Window.partitionBy($"user").orderBy(desc("rating")) // Calculate the rank for each item val withRank = df.withColumn("rank", rank.over(w)) // Filter to retain only the top N items val topNPerUser = withRank.where($"rank" <= n)
Plus de détails :
Si vous préférez utiliser la fonction row_number, qui attribue des numéros de ligne séquentiels plutôt que des rangs (en ignorant les égalités), vous pouvez remplacer le rang par row_number dans la définition de la fenêtre :
val w = Window.partitionBy($"user").orderBy(desc("rating")) val withRowNumber = df.withColumn("row_number", row_number.over(w)) val topNPerUser = withRowNumber.where($"row_number" <= n)
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!