Pyspark array_position & array_repeat

Pyspark array_position & array_repeat
“I Python er Pyspark en Spark -modul som brukes til å gi en lignende type prosessering som Spark ved hjelp av DataFrame.

Det gir StructType () og structfield () -metodene som brukes til å definere kolonnene i Pyspark DataFrame.

Ved å bruke disse metodene, kan vi definere kolonnenavn og datatyper av de spesielle kolonnene.”

La oss diskutere dem en etter en

Struktureltype ()

Denne metoden brukes til å definere strukturen til Pyspark DataFrame. 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 strukturen () metoden 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 i ArrayType ().

Så 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 og 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:

array_position ()

array_position () brukes til å returnere plasseringen av verdien som er til stede i en matrise i hver rad i matrise -typen kolonne. Det tar to parametere, den første parameteren er array -kolonnen, og den andre parameteren er verdien. Den returnerer verdiposisjonen i hver matrise. Posisjonen starter med 1.

Hvis det er flere verdier i samme matrise, vil det returnere plasseringen av den første verdien.

Syntaks

array_position (array_column, "verdi")

Parametere

  1. array_column er array -kolonnen som har matriser med verdier
  2. Verdien er til stede i matrisen.

Array_Position () -funksjonen brukes med Select () -metoden for å gjøre handlingen.

Komme tilbake
Hvis verdien er til stede i en matrise, vil den returnere posisjonen; Ellers kommer den tilbake 0.

Eksempel 1
I dette eksemplet vil vi få plasseringen av verdi - “k” fra Student_full_name -kolonnen i ovennevnte DataFrame.

#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)
#Return Posisjonen til verdi - K i hver rad i Student_full_name kolonnen
df.velg ("student_full_name", array_position ("student_full_name", 'k')).forestilling()

Produksjon

Du kan se i den andre kolonnen som verdsetter posisjoner i matriser i alle rader ble returnert.

  1. I første rad eksisterer ikke k - derfor returnerte den 0
  2. I den andre raden eksisterer ikke k - derfor returnerte den 0
  3. I den tredje raden eksisterer K på to posisjoner, 1. og 3. - det tar bare den første posisjonen, så den returnerer 0
  4. I den fjerde raden eksisterer K i første stilling - og derfor returnerte den 1
  5. I femte rad eksisterer ikke k - derfor returnerte den 0

Eksempel 2
I dette eksemplet vil vi få plasseringen av verdi - “A” fra Student_full_name -kolonnen i ovennevnte DataFrame.

#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)
#Return Posisjonen til verdi - A i hver rad i Student_full_name kolonnen
df.velg ("student_full_name", array_position ("student_full_name", 'a')).forestilling()

Produksjon

Du kan se i den andre kolonnen som verdsetter posisjoner i matriser i alle rader ble returnert.

  1. I første rad eksisterer a på første stilling - og derfor returnerte den 1
  2. I den andre raden eksisterer ikke a - derfor returnerte den 0
  3. I den tredje raden eksisterer a i den andre posisjonen- så den returnerer 2
  4. I den fjerde raden eksisterer ikke a - derfor returnerte den 0
  5. I den femte raden eksisterer ikke a - og derfor returnerer den 0.

array_repeat ()

array_repeat () brukes til å gjenta matrisen n ganger. Med andre ord, den vil duplisere matrisen og erstatte n ganger over alle rader i kolonnen Array Type. Det tar to parametere. Den første parameteren er kolonnenavnet for array -type, og den andre parameteren tar å gjenta, som tar en heltallverdi som refererer til antall ganger for å gjenta matrisen.

Syntaks

array_repeat (array_column, gjenta)

Parametere

  1. array_column er array -kolonnen som har matriser med verdier
  2. Gjenta tar en heltallverdi for å gjenta matrisen i alle rader

Array_Repeat () -funksjonen brukes med Select () -metoden for å gjøre handlingen.

Komme tilbake
Hvis du returnerte gjentatte matriser i den nestede matrisen.

Eksempel 1
I dette eksemplet vil vi gjenta matrisen 2 ganger i alle rader i Student_full_name -kolonnen ved hjelp av array_repeat () og vise DataFrame ved hjelp av Collect -metoden.

#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)
#repat arrayen 2 ganger
df.velg ("student_full_name", array_repeat ("student_full_name", 2)).samle inn()

Produksjon

[Rad (student_full_name = ['a'], array_repeat (student_full_name, 2) = [['a'], ['a']]),
Rad (student_full_name = ['b', 'l', 'b'], array_repeat (student_full_name, 2) = [['b', 'l', 'b'], ['b', 'l', ' B ']]),
Rad (student_full_name = ['k', 'a', 'k'], array_repeat (student_full_name, 2) = [['k', 'a', 'k'], ['k', 'a', ' K ']]),
Rad (student_full_name = ['k'], array_repeat (student_full_name, 2) = [['k'], ['k']]),
Rad (student_full_name = ['b', 'p'], array_repeat (student_full_name, 2) = [['b', 'p'], ['b', 'p']]]]]]

Vi kan se at matrisen gjentas 2 ganger i alle rader av Student_full_name -kolonnen i et nestet utvalg,

Eksempel 2
I dette eksemplet vil vi gjenta matrisen 4 ganger i alle rader i Student_full_name -kolonnen ved hjelp av array_repeat () og vise DataFrame ved hjelp av Collect -metoden.

#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)
#repat arrayen 4 ganger
df.velg ("student_full_name", array_repeat ("student_full_name", 4)).samle inn()

Produksjon

[Rad (student_full_name = ['a'], array_repeat (student_full_name, 4) = [['a'], ['a'], ['a'], ['a']])),
Rad (student_full_name = ['b', 'l', 'b'], array_repeat (student_full_name, 4) = [['b', 'l', 'b'], ['b', 'l', ' B '], [' b ',' l ',' b '], [' b ',' l ',' b ']]),
Rad (student_full_name = ['k', 'a', 'k'], array_repeat (student_full_name, 4) = [['k', 'a', 'k'], ['k', 'a', ' K '], [' k ',' a ',' k '], [' k ',' a ',' k ']]),
Rad (student_full_name = ['k'], array_repeat (student_full_name, 4) = [['k'], ['k'], ['k'], ['k']]),
Rad (student_full_name = ['b', 'p'], array_repeat (student_full_name, 4) = [['b', 'p'], ['b', 'p'], ['b', 'p' ], ['B', 'p']])]

Vi kan se at matrisen gjentas 4 ganger i alle rader i Student_full_name -kolonnen i et nestet utvalg.

Konklusjon

I denne Pyspark -artikkelen så vi to forskjellige matrisefunksjoner. array_position () brukes til å returnere posisjonen til den spesifiserte verdien i en matrise. Vi la merke til at den ville returnere den første posisjonen hvis det var flere verdier i en matrise. Deretter diskuterte vi metoden Array_Repeat () som brukes til å duplisere matrisen N ganger på tvers av alle rader. De gjentatte matriser lagres i en nestet matrise. Begge funksjonene bruker Select () -metoden for å gjøre funksjonaliteten.