Pyspark eksplodere og eksplodere_outer

Pyspark eksplodere og eksplodere_outer
I Python er Pyspark en Spark -modul som brukes til å gi en lignende type prosessering som Spark ved hjelp av DataFrame. Det gir Struktureltype () og Structfield () Metoder som brukes til å definere kolonnene i Pyspark DataFrame.

Ved å bruke disse metodene kan vi definere kolonnens navn og datatyper av kolonnene.

Struktureltype ()

Denne metoden brukes til å definere strukturen til Pyspark -datarammen. Den vil godta en liste over datatyper sammen med kolonnenavn for den gitte DataFrame. Dette er kjent som skjemaet for Dataframe. Den lagrer en samling felt

Structfield ()

Denne metoden brukes inne i Struktureltype () Metode for Pyspark DataFrame. Den aksepterer kolonnenavn med datatypen.

ArrayType ()

Denne metoden brukes til å definere arraystrukturen til Pyspark DataFrame. Den vil godta en liste over datatyper. Den lagrer en samling felt. Vi kan plassere datatyper inne ArrayType (). I denne artikkelen må vi lage en dataaframe med en matrise.

La oss lage en dataaframe med 2 kolonner. Første kolonne er student_category som refererer til heltallfeltet for å lagre student -ID -er. Den andre kolonnen - Student_full_name brukes til å lagre strengverdier i en matrise opprettet ved hjelp av ArrayType ().

#import Pyspark -modulen
Importer pyspark
#import SparkSession for å lage en økt
Fra Pyspark.SQL Import SparkSession
#og importerer strukturtyper og andre datatyper
Fra Pyspark.SQL.typer importerer struktur, strukturfelt, strengtype, integertype, floattype, arrayType
Fra Pyspark.SQL.Funksjoner importerer array_contains
#Create en app som heter Linuxhint
Spark_app = SparkSession.bygger.AppName ('Linuxhint').getorCreate ()
# Vurder en matrise med 5 elementer
my_array_data = [(1, ['a']), (2, ['b', 'l', 'b']), (3, ['k', 'a', 'k']), (( 4, ['K']),
(3, ['B', 'P'])]
#definer strukturen og strukturfeltene
#for dataene ovenfor
skjema = structType ([structField ("student_category", integertype ()), structfield ("student_full_name", arrayType (StringType ()))])
#skape dataaframe og legge til skjemaet til dataaframe
df = spark_app.CreateTataFrame (my_array_data, skjema = skjema)
df.forestilling()

Produksjon:

eksplodere()

Nå får vi se hva eksplodere() gjør. eksplodere() vil returnere hver enkelt verdi fra en matrise. Hvis matrisen er tom eller null, vil den ignorere og gå til neste matrise i en matrise -type kolonne i Pyspark DataFrame. Dette er mulig ved å bruke plukke ut() metode. Inne i denne metoden kan vi bruke array_min () funksjon og returnere resultatet.

Syntaks:

Dataramme.Velg (Explode (Array_Column))

Parametere:
- Array_column: Inneholder array -type verdier
Komme tilbake:
- Den vil returnere alle verdiene i en matrise i alle rader i en matrise -type kolonne i en Pyspark DataFrame.

Eksempel 1:

I dette eksemplet vil vi returnere alle verdiene i en matrise fra Student_full_name -kolonnen.

#import Pyspark -modulen
Importer pyspark
#import SparkSession for å lage en økt
Fra Pyspark.SQL Import SparkSession
#og importerer strukturtyper og andre datatyper
Fra Pyspark.SQL.typer importerer struktur, strukturfelt, strengtype, integertype, floattype, arrayType
Fra Pyspark.SQL.Funksjoner importerer *
#Create en app som heter Linuxhint
Spark_app = SparkSession.bygger.AppName ('Linuxhint').getorCreate ()
# Vurder en matrise med 5 elementer
my_array_data = [(1, ['a']), (2, ['b', 'l', 'b']), (3, ['k', 'a', 'k']),
(4, ['k']), (3, ['b', 'p'])]]
#definer strukturen og strukturfeltene
#for dataene ovenfor
skjema = structType ([structField ("student_category", integertype ()), structfield ("student_full_name", arrayType (StringType ()))])
#skape dataaframe og legge til skjemaet til dataaframe
df = spark_app.CreateTataFrame (my_array_data, skjema = skjema)
# Bruk eksplodere på Student_full_name -kolonnen
df.velg ("student_full_name", eksplodere ('student_full_name')).forestilling()

Produksjon:

Vi kan se at i den andre kolonnen blir hver verdi i matrisen fra hver rad returnert.

La oss se hva om matriseverdiene er tomme.

Eksempel 2:

Denne dataaframe har ingen verdier i matrisen.

#import Pyspark -modulen
Importer pyspark
#import SparkSession for å lage en økt
Fra Pyspark.SQL Import SparkSession
#og importerer strukturtyper og andre datatyper
Fra Pyspark.SQL.typer importerer struktur, strukturfelt, strengtype, integertype, floattype, arrayType
Fra Pyspark.SQL.Funksjoner importerer *
#Create en app som heter Linuxhint
Spark_app = SparkSession.bygger.AppName ('Linuxhint').getorCreate ()
# Vurder en matrise med 5 elementer
my_array_data = [(1, []), (2, []), (3, []), (4, []), (3, [])]
#definer strukturen og strukturfeltene
#for dataene ovenfor
skjema = structType ([structField ("student_category", integertype ()), structfield ("student_full_name", arrayType (StringType ()))])
#skape dataaframe og legge til skjemaet til dataaframe
df = spark_app.CreateTataFrame (my_array_data, skjema = skjema)
# eksplodere Student_full_name kolonnen
df.velg ("student_full_name", eksplodere ('student_full_name')).forestilling()

Produksjon:

Det returnerer ingenting siden alle verdiene mangler i array -kolonnen - Student_full_name.

explode_outer ()

Nå får vi se hva explode_outer () gjør. explode_outer () vil returnere hver enkelt verdi fra en matrise. Hvis matrisen er tom eller null, returnerer den null og går til neste matrise i en matrise -type kolonne i Pyspark DataFrame. Dette er mulig ved å bruke plukke ut() metode. Inne i denne metoden kan vi bruke array_min () funksjon og returnere resultatet.

Syntaks:

Dataramme.Velg (Explode_outer (Array_Column))

Parametere:
- Array_column: Inneholder array -type verdier

Komme tilbake:
- Den vil returnere alle verdiene i en matrise i alle rader i en matrise -type kolonne i en Pyspark DataFrame.

Forskjellen mellom eksplodere() og explode_outer () er det, eksplodere() vil ikke returnere noe når det ikke er noen verdier i matrisen. Men explode_outer () return null når det ikke er noen verdier i matrisen.

Eksempel 1:

I dette eksemplet vil vi returnere alle verdiene i en matrise fra Student_full_name -kolonnen.

#import Pyspark -modulen
Importer pyspark
#import SparkSession for å lage en økt
Fra Pyspark.SQL Import SparkSession
#og importerer strukturtyper og andre datatyper
Fra Pyspark.SQL.typer importerer struktur, strukturfelt, strengtype, integertype, floattype, arrayType
Fra Pyspark.SQL.Funksjoner importerer *
#Create en app som heter Linuxhint
Spark_app = SparkSession.bygger.AppName ('Linuxhint').getorCreate ()
# Vurder en matrise med 5 elementer
my_array_data = [(1, ['a']), (2, ['b', 'l', 'b']), (3, ['k', 'a', 'k']),
(4, ['k']), (3, ['b', 'p'])]]
#definer strukturen og strukturfeltene
#for dataene ovenfor
skjema = structType ([structField ("student_category", integertype ()), structfield ("student_full_name", arrayType (StringType ()))])
#skape dataaframe og legge til skjemaet til dataaframe
df = spark_app.CreateTataFrame (my_array_data, skjema = skjema)
# Bruk Explode_outer på Student_full_name -kolonnen
df.velg ("student_full_name", eksplodere_outer ('student_full_name')).forestilling()

Produksjon:

La oss se hva om matriseverdiene er tomme.

Eksempel 2:

Denne dataaframe har ingen verdier i matrisen.

#import Pyspark -modulen
Importer pyspark
#import SparkSession for å lage en økt
Fra Pyspark.SQL Import SparkSession
#og importerer strukturtyper og andre datatyper
Fra Pyspark.SQL.typer importerer struktur, strukturfelt, strengtype, integertype, floattype, arrayType
Fra Pyspark.SQL.Funksjoner importerer *
#Create en app som heter Linuxhint
Spark_app = SparkSession.bygger.AppName ('Linuxhint').getorCreate ()
# Vurder en matrise med 5 elementer
my_array_data = [(1, []), (2, []), (3, []), (4, []), (3, [])]
#definer strukturen og strukturfeltene
#for dataene ovenfor
skjema = structType ([structField ("student_category", integertype ()), structfield ("student_full_name", arrayType (StringType ()))])
#skape dataaframe og legge til skjemaet til dataaframe
df = spark_app.CreateTataFrame (my_array_data, skjema = skjema)
# Bruk eksplodere_outer Student_full_name kolonnen
df.velg ("student_full_name", eksplodere_outer ('student_full_name')).forestilling()

Produksjon:

Det returnerer null i alle rader siden alle verdiene mangler i matrise-kolonnen- student_full_name.

Konklusjon

I denne artikkelen diskuterte vi eksplodere() og explode_outer () Brukes på kolonnen Array Type i DataFrame med to forskjellige eksempler. eksplodere() og explode_outer () vil utføre noen handlinger når alle verdiene i matrisen ikke er null. Hvis noen verdi i en matrise er null, eksplodere() vil ignorere den nullverdien. Men explode_outer () vil vurdere og returnere nullverdien uansett hvor nullverdien er til stede i matrisen.