Fonction de fenêtre Pyspark dense_rank

Fonction de fenêtre Pyspark dense_rank
dense_rank () dans Pyspark est une fonction de fenêtre qui définit les rangs sur les lignes de chaque partition.

Le rang commence à partir de 1, et si des valeurs sont les mêmes en deux lignes ou plus, le même rang sera attribué.

Ici, les valeurs proviennent de la colonne où nous avons spécifié la colonne à l'intérieur de l'ordre (). Ainsi, sur la base des valeurs de cette colonne, dense_rank () vérifie les valeurs et attribue le numéro de rang.

L'essentiel est que dense_rank () n'est pas disponible directement. Nous devons l'importer à partir du pyspark.SQL.les fonctions module.

Dans Pyspark, il est possible de partitionner les lignes dans le dataframe à l'aide de la fonction de fenêtre. Il est disponible dans le pyspark.SQL.fenêtre module.

L'avantage de la partition est d'atteindre la cohérence des données et le regroupement. Après avoir effectué la partition, nous pouvons définir les rangs sur les lignes de chaque partition à l'aide de la fonction dense_rank ().

Il est possible de partitionner les lignes dans un dataframe en fonction des valeurs d'une colonne particulière. Donc, toutes les valeurs similaires sont définies sur chaque partition.

Nous devons suivre les étapes suivantes de la partition et appliquer dense_rank sur les données partitionnées:

Pas:

  1. Créez un Pyspark DataFrame avec des valeurs similaires dans au moins une colonne.
  2. Partitionne les données à l'aide de la méthode partition () disponible dans la fonction de fenêtre et commandez-les en fonction de la colonne à l'aide de la fonction OrderBy ().
    Syntaxe:
    partition = fenêtre.partitionby («colonne»).OrderBy («colonne»)
    Nous pouvons commander les données partitionnées avec la colonne partitionnée ou toute autre colonne.
  3. Maintenant, vous pouvez utiliser la fonction dense_rank () sur les lignes partitionnées en utilisant la fonction over ().
    Ainsi, nous ajouterons une colonne pour stocker le numéro de ligne à l'aide de la fonction WithColumn ().
    Syntaxe:
    dataframe_obj.withColumn ("Name", dense_rank ().sur (partition))
    Ici, le nom spécifie le nom de la ligne, et DataFrame_OBJ est notre Pyspark DataFrame.

    Implémentons le code.

Exemple 1
Ici, nous allons créer un pyspark dataframe qui a 5 colonnes: [«sujet_id», «nom», «âge», «Technology1», «Technology2»] avec 10 lignes et partitionner les lignes en fonction de Technologie1 en utilisant la fonction de fenêtre.

Enfin, nous donnerons des rangs aux lignes dans toutes les partitions en ajoutant une nouvelle colonne nommée «Rang dense".

Importer Pyspark
de Pyspark.Importation SQL *
Spark_App = Sparkcession.constructeur.nom de l'application('_').getorCreate ()
étudiants = [(4, «sravan», 23, «php», «test»),
(4, «sravan», 23, «php», «test»),
(46, «Mounika», 22, '.Net ',' html '),
(4, «Deepika», 21, «Oracle», «html»),
(46, «Mounika», 22, «Oracle», «Testing»),
(12, «Chandrika», 22, «Hadoop», «C #»),
(12, «Chandrika», 22, «Oracle», «Testing»),
(4, «Sravan», 23, «Oracle», «C #»),
(4, «Deepika», 21, «Php», «C #»),
(46, «Mounika», 22, '.Net ',' test ')
]]
dataframe_obj = spark_app.CreatedataFrame (étudiants, [«sujet_id», «nom», «âge», «technologie1», «technologie2»])
Imprimer ("---------- réelle DataFrame ----------")
dataframe_obj.montrer()
# Importer la fonction de fenêtre
de Pyspark.SQL.Fenêtre d'importation de fenêtre
#IMPORT LE DENNE_RANK DE PYSPARK.SQL.les fonctions
de Pyspark.SQL.Fonctions Import Dense_Rank
#Partition le dataframe en fonction des valeurs de la colonne Technology1 et
#ordre les lignes dans chaque partition basée sur la colonne sujette
partition = fenêtre.partitionby ("Technology1").OrderBy ('Subject_id')
print ("---------- partitionné DataFrame ----------")
#Now mentionner dense_rank pour chaque ligne dans une colonne de grade dense
dataframe_obj.WithColumn ("Rank dense", dense_rank ().sur (partition)).montrer()

Sortir:

Explication
La première sortie représente les données réelles présentes dans le dataframe.

Dans la deuxième sortie, la partition est effectuée sur la base du Technologie1 colonne.

Partitions totales: - 4

Partition 1:
.Le filet s'est produit deux fois dans la première partition. Les valeurs dans la colonne subs_id sont les mêmes. Par conséquent, la fonction dense_rank () renvoie le même rang-1 pour les deux .Valeurs nettes.

Partition 2:
Hadoop s'est produit une fois dans la deuxième partition. Donc, le rang est 1.

Partition 3:
Oracle s'est produit quatre fois dans la troisième partition.
Pour les deux premiers oracle, les valeurs sujets_id sont les mêmes, donc pour les deux, le Rank-1 est attribué.
Pour le troisième oracle, le rang est 2.
Pour le dernier oracle, le rang est de 3.

Partition 4:
PHP s'est produit trois fois dans la quatrième partition, et les valeurs dans la colonne Subject_ID sont les mêmes pour tous. Par conséquent, le rang est 1 pour tous les php.

Exemple 2
Ici, en utilisant la fonction de fenêtre, nous partirons les lignes en fonction Technologie2.

Enfin, nous classerons les lignes en fonction de la colonne Subject_ID dans toutes les partitions en ajoutant une nouvelle colonne nommée "Rang dense".

(Si vous n'avez pas créé le Pyspark DataFrame, créez-le en utilisant le premier exemple.)

# Importer la fonction de fenêtre
de Pyspark.SQL.Fenêtre d'importation de fenêtre
#IMPORT LE DENNE_RANK DE PYSPARK.SQL.les fonctions
de Pyspark.SQL.Fonctions Import Dense_Rank
#Partition le dataframe en fonction des valeurs de la colonne Technology2 et
#ordre les lignes dans chaque partition basée sur la colonne sujette
partition = fenêtre.partitionby ("Technology2").OrderBy ('Subject_id')
print ("---------- partitionné DataFrame ----------")
#Now mentionner dense_rank pour chaque ligne dans une colonne de grade dense
dataframe_obj.WithColumn ("Rank dense", dense_rank ().sur (partition)).montrer()

Sortir:

Explication
La sortie représente les données réelles présentes dans le dataframe.

Dans la deuxième sortie, la partition est effectuée sur la base du Technologie2 colonne et commandée sur la base de la colonne Subject_ID.

Partitions totales: - 3

Partition 1:
C # s'est produit trois fois dans la première partition. De plus, les deux premières valeurs dans la colonne Subject_ID sont les mêmes. Par conséquent, la fonction dense_rank () renvoie le même rang-1 pour les deux premiers C #, et pour le troisième C #, le rang est 2.

Partition 2:
HTML s'est produit deux fois dans la deuxième partition, et les valeurs Subject_id sont différentes pour ces deux. Ainsi, le rang-1 est attribué pour le premier HTML, et le rang 2 est attribué pour le second.

Partition 3:
Les tests se sont produits cinq fois dans la troisième partition.
Pour les deux premiers tests, les valeurs Subject_id sont les mêmes, donc pour les deux, le Rank-1 est attribué.
Pour le troisième test, le rang est de 2.
Pour les derniers tests, le rang était de 3.

Exemple 3
Ici, en utilisant la fonction de fenêtre, nous partirons les lignes en fonction Technologie2.

Enfin, nous classerons les lignes en fonction de la colonne d'âge dans toutes les partitions en ajoutant une nouvelle colonne nommée «Rang dense".

(Si vous n'avez pas créé le Pyspark DataFrame, créez-le en utilisant le premier exemple.)

# Importer la fonction de fenêtre
de Pyspark.SQL.Fenêtre d'importation de fenêtre
#IMPORT LE DENNE_RANK DE PYSPARK.SQL.les fonctions
de Pyspark.SQL.Fonctions Import Dense_Rank
#Partition le dataframe en fonction des valeurs de la colonne Technology2 et
#ordre les lignes dans chaque partition en fonction de la colonne d'âge
partition = fenêtre.partitionby ("Technology2").OrderBy («Age»)
print ("---------- partitionné DataFrame ----------")
#Now mentionner dense_rank pour chaque ligne dans une colonne de grade dense
dataframe_obj.WithColumn ("Rank dense", dense_rank ().sur (partition)).montrer()

Sortir:

Explication
La sortie représente les données réelles présentes dans le dataframe.
Dans la deuxième sortie, la partition est effectuée sur la base de la colonne Technology2 et commandée en fonction de la colonne d'âge.

Partitions totales: - 3

Partition 1:
C # s'est produit trois fois dans la première partition. Toutes les valeurs de la colonne d'âge sont différentes. Par conséquent, la fonction dense_rank () renvoie les rangs 1,2 et 3 pour trois valeurs C #.

Partition 2:
HTML s'est produit deux fois dans la première partition. Toutes les valeurs de la colonne d'âge sont différentes. Par conséquent, la fonction dense_rank () renvoie les rangs 1 et 2 pour deux valeurs HTML.

Partition 3:
Les tests se sont produits cinq fois dans la troisième partition.
Pour les trois premières valeurs de test, les valeurs d'âge sont les mêmes. Donc, pour trois, le rang-1 est affecté.
Les valeurs d'âge pour les quatrième et cinquième tests sont les mêmes, donc le rang 2 est donné aux deux.

Conclusion

Nous avons discuté de partitionner les lignes dans le pyspark dataframe et de définir le rang dans chaque partition à l'aide de la fonction de fenêtre dense_rank (). dense_rank dans Pyspark est une fonction de fenêtre qui définit les rangs sur les lignes de chaque partition. Le rang commence à partir de 1, et si des valeurs sont les mêmes en deux lignes ou plus, le même rang sera attribué.