Pyspark - ROW_NUMBER FUNKSJON

Pyspark - ROW_NUMBER FUNKSJON
Det er mulig å dele opp radene i DataFrame ved å bruke vindusfunksjonen i Pyspark,. Det er tilgjengelig i Pyspark.SQL.vindu modul.

Fordelen med partisjon er å oppnå datakonsistens og gruppering. Etter å ha utført partisjonen, kan vi gi tallene til raden i hver partisjon ved hjelp av ROW_NUMBER () funksjon.

Det er mulig å skille ut radene i en dataaframe basert på verdiene i en bestemt kolonne. Alle de lignende verdiene er satt til hver partisjon. Anta at det er 3 typer lignende verdier, da er hver type en partisjon. Så det vil være tre partisjoner.

Row_number () vindusfunksjon

Row_number i Pyspark er en vindusfunksjon som brukes til å stille tallene fra 1 i hvert partisjonert vindu.

Det viktigste er at rad_number () ikke er tilgjengelig direkte. Vi må importere det fra Pyspark.SQL.funksjoner modul.

Syntaks for å importere modul:

Fra Pyspark.SQL.Funksjoner importerer radnummer

Ellers kan vi også gjøre det for å importere alle metodene fra denne modulen.

Fra Pyspark.SQL.Funksjoner importerer *

Vi må følge følgende trinn for å utføre partisjonen og bruke radnummeret på de partisjonerte dataene.

Trinn:

  1. Lag en Pyspark DataFrame som har noen lignende verdier i minst en kolonne.
  2. Partisjon Dataene ved hjelp av PartitionBy () -metoden tilgjengelig i vindusfunksjonen og bestill dem basert på kolonnen ved å bruke OrderBy () -funksjonen.

Syntaks:

partisjon = vindu.Partitionby (“kolonne”).Orderby (“Kolonne”)

Vi kan bestille de partisjonerte dataene med den partisjonerte kolonnen eller en hvilken som helst annen kolonne.

  1. Nå kan du bruke Row_Number () -funksjonen på de partisjonerte radene ved å bruke over() funksjon. Så vi legger til en kolonne for å lagre radnummeret ved hjelp av WithColumn () funksjon.

Syntaks:

DataFrame_obj.WithColumn ("Navn", Row_number ().over (partisjon))

Her spesifiserer navnet radnavnet og DataFrame_OBJ er vår Pyspark DataFrame.

La oss implementere koden.

Eksempel 1:

Her oppretter vi en Pyspark DataFrame som har 5 kolonner - ['Subject_id', 'Name', 'Age', 'Technology1', 'Technology2'] med 10 rader og partisjon av radene basert på Teknologi1 Bruke vindusfunksjonen etter å ha fått radnumrene for partisjoner og legg til disse i kolonnen - Rad for teknologi1.

Importer pyspark
Fra Pyspark.SQL import *
Spark_app = SparkSession.bygger.AppName ('_').getorCreate ()
Studenter = [(4, 'Sravan', 23, 'PHP', 'Testing'),
(2, 'Sravan', 23, 'Oracle', 'Testing'),
(46, 'Mounika', 22, '.Nett ',' 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, '.Nett ',' testing ')
]
DataFrame_OBJ = Spark_App.CreateTataFrame (Studenter, ['Subject_id', 'Name', 'Age', 'Technology1', 'Technology2'])
Print ("---------- Faktisk DataFrame ----------")
DataFrame_obj.forestilling()
# Importer vindusfunksjonen
Fra Pyspark.SQL.Vindusimportvindu
#import rad_number fra pyspark.SQL.funksjoner
Fra Pyspark.SQL.Funksjoner importerer radnummer
#Partition DataFrame basert på verdiene i Technology1 -kolonnen og
#Order radene i hver partisjon basert på emne_id -kolonnen
partisjon = vindu.Partitionby ("Technology1").Orderby ('emne_id')
Print ("---------- Partitioned DataFrame ----------")
#Now Nevn radnummer for hver rad i radkolonnen
DataFrame_obj.WithColumn ("Row for Technology1", Row_number ().over (partisjon)).forestilling()

Produksjon:

Forklaring:

Den første utgangen representerer de faktiske dataene som er til stede i DataFrame. I den andre utgangen gjøres partisjonen basert på Teknologi1 kolonne.

Det totale antall partisjoner er 4.

Partisjon 1:

De .Net skjedde to ganger i den første partisjonen. Så, rad_numrene er 1 og 2.

Partisjon 2:

Hadoop skjedde en gang i den andre partisjonen. Så, radnummeret er 1.

Partisjon 3:

Oracle skjedde fem ganger i tredje partisjon. Så, rad_numrene er 1, 2, 3, 4 og 5.

Partisjon 4:

PHP skjedde to ganger i den femte partisjonen. Så, rad_numrene er 1 og 2.

Eksempel 2:

For den samme dataaframet partisjonerer vi radene basert på Technology2 Bruke vindusfunksjonen etter å ha fått radnumrene for partisjoner og legg til disse i kolonnen - Rad for teknologi2.

Importer pyspark
Fra Pyspark.SQL import *
Spark_app = SparkSession.bygger.AppName ('_').getorCreate ()
Studenter = [(4, 'Sravan', 23, 'PHP', 'Testing'),
(2, 'Sravan', 23, 'Oracle', 'Testing'),
(46, 'Mounika', 22, '.Nett ',' 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, '.Nett ',' testing ')
]
DataFrame_OBJ = Spark_App.CreateTataFrame (Studenter, ['Subject_id', 'Name', 'Age', 'Technology1', 'Technology2'])
Print ("---------- Faktisk DataFrame ----------")
DataFrame_obj.forestilling()
# Importer vindusfunksjonen
Fra Pyspark.SQL.Vindusimportvindu
#import rad_number fra pyspark.SQL.funksjoner
Fra Pyspark.SQL.Funksjoner importerer radnummer
#Partition DataFrame basert på verdiene i Technology2 -kolonnen og
#Order radene i hver partisjon basert på emne_id -kolonnen
partisjon = vindu.Partitionby ("Technology2").Orderby ('emne_id')
Print ("---------- Partitioned DataFrame ----------")
#Now Nevn radnummer for hver rad i radkolonnen
DataFrame_obj.WithColumn ("Row for Technology2", Row_number ().over (partisjon)).forestilling()

Produksjon:

Forklaring:

Den første utgangen representerer de faktiske dataene som er til stede i DataFrame. I den andre utgangen gjøres partisjonen basert på Technology2 kolonne.

Det totale antall partisjoner er 3.

Partisjon 1:

C# oppstod tre ganger i første partisjon. Så, rad_numrene er 1, 2 og 3.

Partisjon 2:

HTML skjedde to ganger i den andre partisjonen. Så, rad_numrene er 1 og 2.

Partisjon 3:

Testing skjedde fem ganger i tredje partisjon. Så, rad_numrene er 1, 2, 3, 4 og 5.

Konklusjon

Vi diskuterte hvordan du kan partisjonere radene i Pyspark DataFrame og få radnumrene i hver partisjon ved å bruke vinduet Row_number (). Row_number i Pyspark er en vindusfunksjon som brukes til å stille tallene fra 1 i hvert partisjonert vindu. Sørg for å bruke denne kommandoen mens du bruker denne funksjonen - Fra Pyspark.SQL.Funksjoner importerer radnummer.