Pyspark Rank Window Function

Pyspark Rank Window Function
Å spesifisere et rangeringsnummer for hver rad med Pyspark er den beste måten slik at det er lett å finne radene i en partisjon.

I Pyspark er det mulig å dele opp radene i DataFrame ved å bruke vindusfunksjonen. Det er tilgjengelig i Pyspark.SQL.vindu modul.

Fordelen med partisjon er å oppnå datakonsistens og gruppering. Etter å ha utført partisjonen, kan vi sette rekkene til radene i hver partisjon ved hjelp av rangering () -funksjonen.

Det er mulig å skille ut radene i en dataaframe basert på verdiene i en bestemt kolonne. Så alle lignende verdier er satt til hver partisjon.

Rang () vindusfunksjon

Rangering i Pyspark er en vindusfunksjon som setter rekkene til radene i hver partisjon.

Rangeringen starter fra 1, og hvis noen verdier er de samme i to eller flere rader, vil samme rang bli tildelt. Imidlertid, for neste rad, vil rangeringen være følgende tall som teller fra de bundne radene (rader med samme rangering).

Her er verdiene fra kolonnen der vi spesifiserte kolonnen inni rekkefølge etter(). Så basert på verdiene i denne kolonnen, rang() sjekker og tildeler rangeringsnummeret.

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

Syntaks for å importere modulen

Fra Pyspark.SQL.Funksjoner importerer rangering

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

Fra Pyspark.SQL.Funksjoner importerer *

Vi må følge trinnene nedenfor for å utføre partisjon og bruke rangering på partisjonerte data.

Trinn:

  1. Lag en Pyspark DataFrame med lignende verdier i minst en kolonne.
  2. Partisjon Dataene ved bruk av PartitionBy () -metode tilgjengelig i vindusfunksjon og bestill dem basert på kolonnen ved bruk av 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.
Nå ved å bruke over() Funksjon på de partisjonerte radene, kan du bruke rang() funksjon. Så vi vil legge til en kolonne for å lagre radnummeret ved hjelp av WithColumn () funksjon.
Syntaks:

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

Så navnet spesifiserer radnavnet her, og DataFrame_OBJ er vår Pyspark DataFrame. La oss implementere koden.

Eksempel 1: Rangerteknologi1 av emne_id

Her vil vi lage en Pyspark DataFrame som har 5 kolonner: ['Subject_id', 'Name', 'Age', 'Technology1', 'Technology2'] med 10 rader og partisjon radene basert på Teknologi1 Bruke vindusfunksjonen.

Til slutt vil vi gi rekker til radene i alle partisjoner ved å legge til en ny kolonne som heter RANG.

Importer pyspark
Fra Pyspark.SQL import *
Spark_app = SparkSession.bygger.AppName ('_').getorCreate ()
Studenter = [(4, 'Sravan', 23, 'PHP', 'Testing'),
(4, 'Sravan', 23, 'PHP', 'Testing'),
(46, 'Mounika', 22, '.Nett ',' 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, '.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 rangering fra pyspark.SQL.funksjoner
Fra Pyspark.SQL.Funksjoner importerer rangering
#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 rangering for hver rad i rangeringskolonne
DataFrame_obj.WithColumn ("Rank", rang ().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.

Totalt partisjoner: 4

Partisjon 1:
.Net skjedde to ganger i den første partisjonen. Verdiene i emn_id -kolonnen er de samme. Derfor returnerer rang () -funksjonen samme rangering for begge .Netto verdier.

Partisjon 2:
Hadoop skjedde en gang i den andre partisjonen. Så rangeringen er 1.

Partisjon 3:

  • Oracle skjedde fire ganger i tredje partisjon.
  • For de to første orakelene er emnet_idverdiene de samme. Så for begge er rang 1 tildelt.
  • For det tredje Oracle er rangering 3 (rang 2 vil ikke eksistere siden, for de to ovennevnte oraklene, ble det gitt 2 rekker).
  • For det siste Oracle er rangering 4.

Partisjon 4:
PHP forekom tre ganger i fjerde partisjon, og verdiene i emnet_id -kolonnen er de samme for alle. Derfor er rangering 1 for alle PHP.

Eksempel 2: Rank Technology2 av emne_id

Her vil vi dele opp radene basert på Technology2 Bruke vindusfunksjonen. Til slutt vil vi gi rekker til radene basert på emne_id -kolonnen i alle partisjoner ved å legge til en ny kolonne som heter “RANG”.

(Hvis du ikke opprettet Pyspark DataFrame, oppretter du det ved å bruke det første eksemplet.)

# Importer vindusfunksjonen
Fra Pyspark.SQL.Vindusimportvindu
#import rangering fra pyspark.SQL.funksjoner
Fra Pyspark.SQL.Funksjoner importerer rangering
#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 rangering for hver rad i rangeringskolonne
DataFrame_obj.WithColumn ("Rank", rang ().over (partisjon)).forestilling()

Produksjon:

Forklaring
Utgangen representerer de faktiske dataene som er til stede i DataFrame.

I den andre utgangen gjøres partisjonen basert på Technology2 Kolonne og bestilt basert på emnet_id -kolonnen.

Totalt partisjoner: 3

Partisjon 1:
C# oppstod tre ganger i første partisjon. De to første verdiene i emn_id -kolonnen er de samme. Derfor returnerer Rank () -funksjonen samme rangering 1 for de to første C#, og for den tredje C#er rangering 3.

Partisjon 2:
HTML skjedde to ganger i den andre partisjonen, og emnet_idverdiene er forskjellige for disse to. Så rang 1 er tildelt for den første HTML, og rang 2 er tildelt for den andre.

Partisjon 3:

  • Testing skjedde fem ganger i tredje partisjon.
  • For de to første testene er emnet_idverdiene de samme. Så for begge er rang 1 tildelt.
  • For den tredje testen er rangering 3 (rang 2 vil ikke eksistere siden, for de to foregående testene, ble det gitt 2 rekker).
  • For den siste testingen var rangering 4.

Eksempel 3: Rangerteknologi2 etter alder

Her vil vi dele opp radene basert på Technology2 Bruke vindusfunksjonen.

Til slutt vil vi gi rekker til radene basert på alderskolonnen i alle partisjoner ved å legge til en ny kolonne som heter “RANG”.

(Hvis du ikke opprettet Pyspark DataFrame, oppretter du det ved å bruke det første eksemplet.)

# Importer vindusfunksjonen
Fra Pyspark.SQL.Vindusimportvindu
#import rangering fra pyspark.SQL.funksjoner
Fra Pyspark.SQL.Funksjoner importerer rangering
#Partition DataFrame basert på verdiene i Technology2 -kolonnen og
#Order radene i hver partisjon basert på alderskolonnen
partisjon = vindu.Partitionby ("Technology2").Orderby ('Alder')
Print ("---------- Partitioned DataFrame ----------")
#Now Nevn rangering for hver rad i rangeringskolonne
DataFrame_obj.WithColumn ("Rank", rang ().over (partisjon)).forestilling()

Produksjon:

Forklaring
Utgangen representerer de faktiske dataene som er til stede i DataFrame. I den andre utgangen gjøres partisjonen basert på Technology2 kolonne og bestilt basert på alderssøylen.

Totalt partisjoner: 3

Partisjon 1:
C# oppstod tre ganger i første partisjon. Og alle verdiene i alderskolonnen er forskjellige. Derfor returnerer rang () -funksjonen rekkene 1, 2 og 3 for tre C# -verdier.

Partisjon 2:
HTML skjedde to ganger i første partisjon. Alle verdiene i alderssøylen er forskjellige. Derfor returnerer rang () -funksjonen rekkene 1 og 2 for to HTML -verdier.

Partisjon 3:

  • Testing skjedde fem ganger i tredje partisjon.
  • For de tre første testingen er aldersverdiene de samme. Så for tre tildeles rang 1.
  • For fjerde og femte testing er aldersverdiene de samme. Så for to tildeles rang 4.

Konklusjon

Vi diskuterte partisjonering av radene i Pyspark DataFrame og satte rangering i hver partisjon ved å bruke Rank () vindusfunksjonen. Rangering i Pyspark er en vindusfunksjon som setter rekkene til radene i hver partisjon. Sørg for å bruke denne kommandoen mens du bruker denne funksjonen Fra Pyspark.SQL.Funksjoner importerer rangering.