Maison >base de données >tutoriel mysql >Comment obtenir les N premiers éléments par groupe dans un Spark DataFrame ?
Dans les opérations Spark DataFrame, vous pouvez rencontrer le besoin de regrouper les données par une colonne spécifique et de récupérer les N premiers éléments au sein de chaque groupe. Cet article montre comment y parvenir en utilisant Scala, en s'inspirant d'un exemple Python.
Considérez le DataFrame fourni :
user1 item1 rating1 user1 item2 rating2 user1 item3 rating3 user2 item1 rating4 ...
Pour récupérer les N premiers éléments pour chaque groupe d'utilisateurs, vous pouvez exploiter une fonction de fenêtre en conjonction avec les opérations orderBy et Where. Voici la mise en œuvre :
// Import required functions and classes import org.apache.spark.sql.expressions.Window import org.apache.spark.sql.functions.{rank, desc} // Specify the number of desired top N items val n: Int = ??? // Define the window definition for ranking val w = Window.partitionBy($"user").orderBy(desc("rating")) // Calculate the rank within each group using the rank function val rankedDF = df.withColumn("rank", rank.over(w)) // Filter the DataFrame to select only the top N items val topNDF = rankedDF.where($"rank" <= n)
Si les égalités ne sont pas un problème, vous pouvez remplacer le rang par row_number :
val topNDF = rankedDF.withColumn("row_num", row_number.over(w)).where($"row_num" <= n)
En utilisant cette approche, vous peut récupérer efficacement les N principaux éléments pour chaque groupe d'utilisateurs de votre DataFrame.
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!