Maison > base de données > tutoriel mysql > Comment obtenir les N premiers enregistrements pour chaque groupe dans un Spark DataFrame ?

Comment obtenir les N premiers enregistrements pour chaque groupe dans un Spark DataFrame ?

DDD
Libérer: 2024-12-23 11:46:36
original
436 Les gens l'ont consulté

How to Get the Top N Records for Each Group in a Spark DataFrame?

Obtenir TopN pour chaque groupe dans un DataFrame

Dans Spark DataFrame, nous devons souvent regrouper les données par une certaine colonne et récupérer le haut N enregistrements de chaque groupe. Par exemple, vous disposez d'un DataFrame avec des données d'évaluation des éléments utilisateur et vous souhaitez trouver les éléments les mieux notés pour chaque utilisateur.

Solution Scala

La Scala La solution à ce problème consiste à utiliser une fonction de fenêtre de classement. Voici comment procéder :

  1. Définissez la valeur N supérieure :

    val n: Int = ???
    Copier après la connexion
  2. Créez une définition de fenêtre pour partitionner les données par l'utilisateur colonne et classez les enregistrements par ordre décroissant de leur note :

    val w = Window.partitionBy($"user").orderBy(desc("rating"))
    Copier après la connexion
  3. Ajouter le classement colonne au DataFrame à l'aide de la fonction de classement :

    df.withColumn("rank", rank().over(w))
    Copier après la connexion
  4. Filtrez le DataFrame pour conserver uniquement les N premiers enregistrements de chaque groupe :

    df.where($"rank" <= n)
    Copier après la connexion

Alternative avec numéro de ligne

Si vous n'avez pas besoin de rompre les égalités, vous peut utiliser la fonction row_number au lieu de la fonction Rank. Cela vous donnera un numéro de ligne unique pour chaque enregistrement de chaque groupe :

df.withColumn("row_number", row_number().over(w))
Copier après la connexion

Vous pourrez ensuite filtrer le DataFrame pour conserver uniquement les N premiers enregistrements de chaque groupe en utilisant les mêmes critères qu'auparavant.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal