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

Comment obtenir les N premiers éléments par groupe dans un Spark DataFrame ?

Linda Hamilton
Libérer: 2024-12-23 01:57:15
original
425 Les gens l'ont consulté

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

Obtenir les N principaux éléments par groupe à l'aide de Spark DataFrame GroupBy

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
...
Copier après la connexion

Solution Scala

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)
Copier après la connexion

Option alternative

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)
Copier après la connexion

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!

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