Pyspark Sum og AVG -vindusfunksjoner

Pyspark Sum og AVG -vindusfunksjoner
Etter å ha delt ut radene i Pyspark DataFrame, er det mulig å returnere den totale summen og gjennomsnittet i hver partisjon. Ved å bruke noen samlede funksjoner i et partisjonsvindu, er det mulig å returnere den totale summen og gjennomsnittet. Først vil vi se hvordan du kan partisjonere DataFrame i Pyspark.

Pyspark partisjon en dataramme

Det er mulig å dele opp radene i DataFrame ved å bruke vindusfunksjonen. Det er tilgjengelig i Pyspark.SQL.vindu modul. Det vil være to trinn for å skille ut radene i en pyspark dataaframe.

Trinn

  1. Lag en Pyspark DataFrame med lignende verdier i minst en kolonne.
  2. Partisjon dataene ved bruk av PartitionBy () -metode tilgjengelig i vindusfunksjonen.

Syntaks

partisjon = vindu.Partitionby (“kolonne”)

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

Eksempel
Her vil vi lage en Pyspark DataFrame som har 5 kolonner: ['Subject_id', 'Name', 'Age', 'Technology1', 'Technology2'] med 10 rader.

Importer pyspark
Fra Pyspark.SQL Import SparkSession
Fra Pyspark.SQL.Funksjoner importerer *
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()

Produksjon:

Pyspark sum () vindusfunksjon

Summen () i vindusfunksjonen brukes til å returnere den totale summen av verdier i hver partisjon. Så det er mulig å returnere en sum etter at Dataframe.

Syntaks

DataFrame_obj.WithColumn ("Sum", sum (Col ("kolonne")).over (partisjon))

Parameter:

Sum (col ("kolonne"))

Her, The sum() Funksjonen tar kolonnenavnet som parameter. Så den returnerer summen av verdier i denne kolonnen i hver partisjon. Vi legger til resultatet i en sumkolonne ved hjelp av WithColumn () funksjon.

Eksempel 1
Nå har vi en dataaframe (opprettet ovenfor). La oss partisjonere det basert på Technology1 -kolonnen og få den totale summen av alle verdier i emnet_id -kolonnen i hver partisjon.

# Importer vindusfunksjonen
Fra Pyspark.SQL.Vindusimportvindu
#import summen og col fra pyspark.SQL.funksjoner
Fra Pyspark.SQL.Funksjoner importerer sum, col
#Partition DataFrame basert på verdiene i Technology1 -kolonnen
partisjon = vindu.Partitionby ("Technology1")
Print ("---------- Partitioned DataFrame ----------")
#Return den totale summen av verdier i emne_id -kolonnen for hver partisjon
DataFrame_obj.WithColumn ("Sum", sum (col ("emne_id")).over (partisjon)).forestilling()

Produksjon:

Forklaring
Totalt partisjoner: 4

Partisjon 1:
.Net skjedde to ganger i den første partisjonen. Og summen av emne_idverdiene er 46+46 = 92.

Partisjon 2:
Hadoop skjedde en gang i den andre partisjonen. Så summen er 12.

Partisjon 3:
Oracle skjedde fire ganger i tredje partisjon.
Og summen av emne_idverdier er 4+46+12+4 = 66.

Partisjon 4:
PHP skjedde tre ganger i fjerde partisjon.
Og summen av emne_idverdier er 4+4+4 = 12.

Eksempel 2
Nå har vi en dataaframe (opprettet ovenfor). La oss skille det ut basert på Technology1 -kolonnen og få den totale summen av alle verdier i alderskolonnen i hver partisjon.

# Importer vindusfunksjonen
Fra Pyspark.SQL.Vindusimportvindu
#import summen og col fra pyspark.SQL.funksjoner
Fra Pyspark.SQL.Funksjoner importerer sum, col
#Partition DataFrame basert på verdiene i Technology1 -kolonnen
partisjon = vindu.Partitionby ("Technology1")
Print ("---------- Partitioned DataFrame ----------")
#Return den totale summen av verdier i alderskolonnen for hver partisjon
DataFrame_obj.WithColumn ("Sum", Sum (Col ("Alder")).over (partisjon)).forestilling()

Produksjon:

Forklaring
Totalt partisjoner: 4

Partisjon 1:
.Net skjedde to ganger i den første partisjonen. Og summen av aldersverdiene er 22+22 = 92.

Partisjon 2:
Hadoop skjedde en gang i den andre partisjonen. Så summen er 22.

Partisjon 3:
Oracle skjedde fire ganger i tredje partisjon.
Og summen av aldersverdiene er 21+22+22+23 = 88.

Partisjon 4:
PHP skjedde tre ganger i fjerde partisjon.
Og summen av aldersverdiene er 23+23+21 = 67.

Pyspark avg () vindusfunksjon

AVG () i vindusfunksjonen brukes til å returnere det totale gjennomsnittet av verdier i hver partisjon. Så det er mulig å returnere gjennomsnittet etter at Dataframe.

Syntaks

DataFrame_obj.WithColumn ("Gjennomsnitt", AVG (Col ("Column")).over (partisjon))

Parameter:

AVG (Col ("kolonne"))

Her, avg () Tar kolonnens navn som parameter. Så den returnerer gjennomsnittet av verdier i denne kolonnen i hver partisjon. Vi legger til resultatet i gjennomsnittskolonnen ved å bruke WithColumn () funksjon.

Eksempel 1
Nå har vi en dataaframe (opprettet ovenfor). La oss skille det ut basert på Technology1 -kolonnen og få det totale gjennomsnittet av alle verdier i emnet_id -kolonnen i hver partisjon.

# Importer vindusfunksjonen
Fra Pyspark.SQL.Vindusimportvindu
#import avg og col fra pyspark.SQL.funksjoner
Fra Pyspark.SQL.Funksjoner importerer avg, col
#Partition DataFrame basert på verdiene i Technology1 -kolonnen
partisjon = vindu.Partitionby ("Technology1")
Print ("---------- Partitioned DataFrame ----------")
#Return det totale gjennomsnittet av verdier i emnet_id -kolonnen for hver partisjon
DataFrame_obj.WithColumn ("Gjennomsnitt", AVG (COL ("Subject_id")).over (partisjon)).forestilling()

Produksjon:

Forklaring
Totalt partisjoner: 4

Partisjon 1:
.Net skjedde to ganger i den første partisjonen. Og gjennomsnittet av emne_idverdier er (46+46)/2 = 46.0.

Partisjon 2:
Hadoop skjedde en gang i den andre partisjonen. Så gjennomsnittet er 12.0.

Partisjon 3:
Oracle skjedde fire ganger i tredje partisjon.
Og gjennomsnittet av emne_idverdier er (4+46+12+4)/4 = 16.5.

Partisjon 4:
PHP skjedde tre ganger i fjerde partisjon.
Og gjennomsnittet av emne_idverdier er (4+4+4)/3 = 4.0.

Eksempel 2
Nå har vi en dataaframe (opprettet ovenfor). La oss skille det ut basert på Technology1 -kolonnen og få det totale gjennomsnittet av alle verdier i alderskolonnen i hver partisjon.

# Importer vindusfunksjonen
Fra Pyspark.SQL.Vindusimportvindu
#import avg og col fra pyspark.SQL.funksjoner
Fra Pyspark.SQL.Funksjoner importerer avg, col
#Partition DataFrame basert på verdiene i Technology1 -kolonnen
partisjon = vindu.Partitionby ("Technology1")
Print ("---------- Partitioned DataFrame ----------")
#returner det totale gjennomsnittet av verdier i alderskolonnen for hver partisjon
DataFrame_obj.WithColumn ("Gjennomsnitt", AVG (COL ("Age")).over (partisjon)).forestilling()

Produksjon:

Forklaring
Totalt partisjoner: 4

Partisjon 1:
.Net skjedde to ganger i den første partisjonen. Og gjennomsnittsalderverdien er (22+22)/2 = 22.0.

Partisjon 2:
Hadoop skjedde en gang i den andre partisjonen. Så gjennomsnittet er 22.0.

Partisjon 3:
Oracle skjedde fire ganger i tredje partisjon.
Og gjennomsnittsalderen er (21+22+22+23)/4 = 22.0.

Partisjon 4:
PHP skjedde tre ganger i fjerde partisjon.
Og gjennomsnittsalderverdien er (23+23+21)/3 = 22.333.

Konklusjon

I denne pyspark -partisjoneringsopplæringen så vi hvordan vi skulle returnere summen av verdier i hvert partisjonert vindu ved å bruke sum() funksjon og gjennomsnittsverdiene i hvert partisjonert vindu ved hjelp av AVG () -funksjonen. Vi la resultatet til det eksisterende DataFrame som en ny kolonne. Det er også mulig å få gjennomsnittet likt avg () funksjon ved bruk av mener(). Tingene import betyr fra Pyspark.SQL.funksjoner modul og bare sørg for at du må importere sum og gjennomsnitt fra samme modul.