Fonction Pyspark - ROW_NUMBER

Fonction Pyspark - ROW_NUMBER
Il est possible de partitionner les lignes de DataFrame à l'aide de la fonction de fenêtre dans Pyspark,. 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 fournir les nombres à la ligne dans chaque partition en utilisant le row_number () fonction.

Il est possible de partitionner les lignes dans un dataframe en fonction des valeurs d'une colonne particulière. Toutes les valeurs similaires sont définies sur chaque partition. Supposons qu'il existe 3 types de valeurs similaires, alors chaque type est une partition. Donc, il y aura trois partitions.

Row_number () Fonction de fenêtre

Le ROW_NUMBER dans Pyspark est une fonction de fenêtre qui est utilisée pour définir les nombres à partir de 1 dans chaque fenêtre partitionnée.

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

Module Syntaxe à Importer:

de Pyspark.SQL.fonctions importation row_number

Sinon, nous pouvons également faire comme cela pour importer toutes les méthodes de ce module.

de Pyspark.SQL.Fonctions Import *

Nous devons suivre les étapes suivantes pour effectuer la partition et appliquer le ROW_NUMBER sur les données partitionnées.

Pas:

  1. Créez un Pyspark DataFrame qui a 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.

  1. Maintenant, vous pouvez utiliser la fonction row_number () sur les lignes partitionnées à l'aide du sur() fonction. Donc, nous ajoutons une colonne pour stocker le numéro de ligne à l'aide du withColumn () fonction.

Syntaxe:

dataframe_obj.withColumn ("name", row_number ().sur (partition))

Ici, le nom spécifie le nom de la ligne et le dataframe_obj est notre pyspark dataframe.

Implémentons le code.

Exemple 1:

Ici, nous créons un pyspark dataframe qui a 5 colonnes - [«sujet_id», «nom», «Âge», «Technology1», «Technology2»] avec 10 lignes et partitionner les lignes en fonction de la Technologie1 Utilisation de la fonction de fenêtre après avoir obtenu les numéros de ligne pour les partitions et les ajouter dans la colonne - Rang pour la technologie1.

Importer Pyspark
de Pyspark.Importation SQL *
Spark_App = Sparkcession.constructeur.nom de l'application('_').getorCreate ()
étudiants = [(4, «sravan», 23, «php», «test»),
(2, «Sravan», 23, «Oracle», «Testing»),
(46, «Mounika», 22, '.Net ',' html '),
(12, «Deepika», 21, «Oracle», «html»),
(46, «Mounika», 22, «Oracle», «Testing»),
(12, «Chandrika», 23, «Hadoop», «C #»),
(12, «Chandrika», 22, «Oracle», «Testing»),
(45, «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 ROW_NUMBER DE PYSPARK.SQL.les fonctions
de Pyspark.SQL.fonctions importation row_number
#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 le numéro de ligne pour chaque ligne dans la colonne de ligne
dataframe_obj.WithColumn ("Row for Technology1", row_number ().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.

Le nombre total de partitions est 4.

Partition 1:

Le .Le filet s'est produit deux fois dans la première partition. Donc, les Row_numbers sont 1 et 2.

Partition 2:

Hadoop s'est produit une fois dans la deuxième partition. Donc, le row_number est 1.

Partition 3:

Oracle s'est produit cinq fois dans la troisième partition. Ainsi, les Row_numbers sont 1, 2, 3, 4 et 5.

Partition 4:

PHP s'est produit deux fois dans la cinquième partition. Donc, les Row_numbers sont 1 et 2.

Exemple 2:

Pour le même dataframe, nous partitions les lignes en fonction Technologie2 Utilisation de la fonction de fenêtre après avoir obtenu les numéros de ligne pour les partitions et les ajouter dans la colonne - Rang pour la technologie2.

Importer Pyspark
de Pyspark.Importation SQL *
Spark_App = Sparkcession.constructeur.nom de l'application('_').getorCreate ()
étudiants = [(4, «sravan», 23, «php», «test»),
(2, «Sravan», 23, «Oracle», «Testing»),
(46, «Mounika», 22, '.Net ',' html '),
(12, «Deepika», 21, «Oracle», «html»),
(46, «Mounika», 22, «Oracle», «Testing»),
(12, «Chandrika», 23, «Hadoop», «C #»),
(12, «Chandrika», 22, «Oracle», «Testing»),
(45, «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 ROW_NUMBER DE PYSPARK.SQL.les fonctions
de Pyspark.SQL.fonctions importation row_number
#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 le numéro de ligne pour chaque ligne dans la colonne de ligne
dataframe_obj.WithColumn ("Row for Technology2", row_number ().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 Technologie2 colonne.

Le nombre total de partitions est 3.

Partition 1:

C # s'est produit trois fois dans la première partition. Ainsi, les Row_numbers sont 1, 2 et 3.

Partition 2:

HTML s'est produit deux fois dans la deuxième partition. Donc, les Row_numbers sont 1 et 2.

Partition 3:

Les tests se sont produits cinq fois dans la troisième partition. Ainsi, les Row_numbers sont 1, 2, 3, 4 et 5.

Conclusion

Nous avons discuté de la façon de partitionner les lignes dans le pyspark dataframe et d'obtenir les numéros de ligne dans chaque partition à l'aide de la fonction de fenêtre Row_number (). Le ROW_NUMBER dans Pyspark est une fonction de fenêtre qui est utilisée pour définir les nombres à partir de 1 dans chaque fenêtre partitionnée. Assurez-vous d'utiliser cette commande tout en utilisant cette fonction - de Pyspark.SQL.fonctions importation row_number.