PySpark SelectExpr()

Pyspark Selectexpr



Ved å bruke funksjonen selectExpr() i PySpark kan vi evaluere et uttrykk direkte uten å lage noen TABLE eller VIEW. Denne funksjonen er tilgjengelig i pyspark.sql.DataFrame-modulen som ligner på select()-metoden. Med selectExpr() kan vi vise kolonnene, bruke funksjonene på kolonnene, evaluere uttrykkene, utføre aggregeringsoperasjonene osv. Det er også mulig å evaluere/spesifisere flere kolonner om gangen.

Pyspark.sql.DataFrame.selectExpr()

Selectexpr()-funksjonen tar kolonnene/settet med uttrykk og returnerer DataFrame basert på de angitte uttrykkene/kolonnene. Flere uttrykk kan spesifiseres i denne funksjonen som er atskilt med komma. For å vise DataFrame kan vi bruke show()/collect()-funksjonene.

Syntaks:







pyspark_DataFrame_object.selectExpr(“Kolonner”/“Uttrykk”)

Her er pyspark_DataFrame_object input PySpark DataFrame.



Scenario 1: Velg kolonnene

I dette scenariet vil vi se hvordan du velger de spesielle kolonnene fra PySpark DataFrame ved å bruke funksjonen selectExpr().



Uttrykket som brukes er 'eksisterende_kolonne som nytt_navn'. Her er den eksisterende_kolonnen kolonnenavnet som finnes i DataFrame og det vises som nytt_navn (Aliasing).





Eksempel:

Lag en PySpark DataFrame kalt 'agri_df' med 5 rader og kolonner. Få «Soil_status» og «Soil_Type»-kolonnene som «STATUS» og «TYPE».

importere pyspark

fra pyspark.sql importer SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Linux hint' ).getOrCreate()

# oppdrettsdata med 5 rader og 5 kolonner

agri =[{ 'Soil_Type' : 'Svart' , 'Irrigation_availability' : 'Nei' , 'Dekar' : 2500 , 'Soil_status' : 'Tørke' ,
'Land' : 'USA' },

{ 'Soil_Type' : 'Svart' , 'Irrigation_availability' : 'Ja' , 'Dekar' : 3500 , 'Soil_status' : 'Våt' ,
'Land' : 'India' },

{ 'Soil_Type' : Ingen , 'Irrigation_availability' : 'Ja' , 'Dekar' : 210 , 'Soil_status' : 'Tørke' ,
'Land' : 'UK' },

{ 'Soil_Type' : 'Annen' , 'Irrigation_availability' : 'Nei' , 'Dekar' : 1000 , 'Soil_status' : 'Våt' ,
'Land' : 'USA' },

{ 'Soil_Type' : 'Sand' , 'Irrigation_availability' : 'Nei' , 'Dekar' : 500 , 'Soil_status' : 'Tørke' ,
'Land' : 'India' }]



# lag datarammen fra dataene ovenfor

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Få Soil_status og Soil_Type som 'STATUS' og 'TYPE'.

agri_df.selectExpr( 'Soil_status as STATUS' , 'Soil_Type as TYPE' ).forestilling()

Produksjon:



Scenario 2: Spesifisering av de betingede uttrykkene

I dette scenariet vil vi se hvordan vi evaluerer betingelsene i funksjonen selectExpr().

Uttrykket som brukes er 'existing_column operator value'. Her er den eksisterende_kolonnen kolonnenavnet som finnes i DataFrame, og vi sammenligner hver verdi i denne kolonnen med strengen/verdien.

Eksempel 1:

Sjekk om landet er 'USA' eller ikke. Operatoren equalto (=) brukes her.

importere pyspark

fra pyspark.sql importer SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Linux hint' ).getOrCreate()

# oppdrettsdata med 5 rader og 5 kolonner

agri =[{ 'Soil_Type' : 'Svart' , 'Irrigation_availability' : 'Nei' , 'Dekar' : 2500 , 'Soil_status' : 'Tørke' ,
'Land' : 'USA' },

{ 'Soil_Type' : 'Svart' , 'Irrigation_availability' : 'Ja' , 'Dekar' : 3500 , 'Soil_status' : 'Våt' ,
'Land' : 'India' },

{ 'Soil_Type' : Ingen , 'Irrigation_availability' : 'Ja' , 'Dekar' : 210 , 'Soil_status' : 'Tørke' ,
'Land' : 'UK' },

{ 'Soil_Type' : 'Annen' , 'Irrigation_availability' : 'Nei' , 'Dekar' : 1000 , 'Soil_status' : 'Våt' ,
'Land' : 'USA' },

{ 'Soil_Type' : 'Sand' , 'Irrigation_availability' : 'Nei' , 'Dekar' : 500 , 'Soil_status' : 'Tørke' ,
'Land' : 'India' }]



# lag datarammen fra dataene ovenfor

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Sjekk om landet er 'USA' eller ikke.

agri_df.selectExpr( 'Land = 'USA'' ).forestilling()

Produksjon:

Eksempel 2:

Sjekk om Soil_Type er NULL eller ikke. Nøkkelordet NULL sjekker om verdien er NULL eller ikke. Hvis den er null, returneres true. Ellers returneres false. Det endelige uttrykket er 'Soil_Type IS NULL'

importere pyspark

fra pyspark.sql importer SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Linux hint' ).getOrCreate()

# oppdrettsdata med 5 rader og 5 kolonner

agri =[{ 'Soil_Type' : 'Svart' , 'Irrigation_availability' : 'Nei' , 'Dekar' : 2500 , 'Soil_status' : 'Tørke' ,
'Land' : 'USA' },

{ 'Soil_Type' : 'Svart' , 'Irrigation_availability' : 'Ja' , 'Dekar' : 3500 , 'Soil_status' : 'Våt' ,
'Land' : 'India' },

{ 'Soil_Type' : Ingen , 'Irrigation_availability' : 'Ja' , 'Dekar' : 210 , 'Soil_status' : 'Tørke' ,
'Land' : 'UK' },

{ 'Soil_Type' : 'Annen' , 'Irrigation_availability' : 'Nei' , 'Dekar' : 1000 , 'Soil_status' : 'Våt' ,
'Land' : 'USA' },

{ 'Soil_Type' : 'Sand' , 'Irrigation_availability' : 'Nei' , 'Dekar' : 500 , 'Soil_status' : 'Tørke' ,
'Land' : 'India' }]



# opprett datarammen fra dataene ovenfor

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Sjekk om Soil_Type er NULL eller ikke.

agri_df.selectExpr( 'Soil_Type ER NULL' ).forestilling()

Produksjon:

Scenario 3: Evaluering av uttrykkene

I dette scenariet vil vi se hvordan du spesifiserer de matematiske uttrykkene. Uttrykket som brukes er 'existing_column matematisk_uttrykk'.

Eksempel:

  1. Vis den faktiske 'Dekar'-kolonnen.
  2. Legg til 100 i 'Dekar'-kolonnen.
  3. Trekk 100 fra 'Dekar'-kolonnen.
  4. Multipliser 100 med 'Dekar'-kolonnen.
  5. Del «Dekar»-kolonnen med 100.
importere pyspark

fra pyspark.sql importer SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Linux hint' ).getOrCreate()

# oppdrettsdata med 5 rader og 5 kolonner

agri =[{ 'Soil_Type' : 'Svart' , 'Irrigation_availability' : 'Nei' , 'Dekar' : 2500 , 'Soil_status' : 'Tørke' ,
'Land' : 'USA' },

{ 'Soil_Type' : 'Svart' , 'Irrigation_availability' : 'Ja' , 'Dekar' : 3500 , 'Soil_status' : 'Våt' ,
'Land' : 'India' },

{ 'Soil_Type' : Ingen , 'Irrigation_availability' : 'Ja' , 'Dekar' : 210 , 'Soil_status' : 'Tørke' ,
'Land' : 'UK' },

{ 'Soil_Type' : 'Annen' , 'Irrigation_availability' : 'Nei' , 'Dekar' : 1000 , 'Soil_status' : 'Våt' ,
'Land' : 'USA' },

{ 'Soil_Type' : 'Sand' , 'Irrigation_availability' : 'Nei' , 'Dekar' : 500 , 'Soil_status' : 'Tørke' ,
'Land' : 'India' }]



# lag datarammen fra dataene ovenfor

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Skriv 4 uttrykk for å trekke fra, addere, dele og multiplisere Acres-kolonnen.

agri_df.selectExpr( 'Dekar' , 'Dekar - 100' , 'Dekar * 100' , 'Dekar + 100' , 'Dekar / 100' ).forestilling()

Produksjon:

Scenario 4: Bruk av aggregerte funksjoner

SUM(kolonne_navn) – Den evaluerer den totale verdien i den angitte kolonnen.

MEAN(kolonne_navn) – Den evaluerer gjennomsnittsverdien i den angitte kolonnen.

MIN(kolonne_navn) – Den returnerer minimumselementet blant alle elementene i den angitte kolonnen.

MAX(kolonne_navn) – Den returnerer maksimumselementet blant alle elementene i den angitte kolonnen.

Eksempel:

  1. Finn total-, gjennomsnitts-, antall-, minimums- og maksimumselementene for 'Acres'.
  2. Finn minimums- og maksimumselementene i «Soil_status»-kolonnen.
importere pyspark

fra pyspark.sql importer SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Linux hint' ).getOrCreate()

# oppdrettsdata med 5 rader og 5 kolonner

agri =[{ 'Soil_Type' : 'Svart' , 'Irrigation_availability' : 'Nei' , 'Dekar' : 2500 , 'Soil_status' : 'Tørke' ,
'Land' : 'USA' },

{ 'Soil_Type' : 'Svart' , 'Irrigation_availability' : 'Ja' , 'Dekar' : 3500 , 'Soil_status' : 'Våt' ,
'Land' : 'India' },

{ 'Soil_Type' : Ingen , 'Irrigation_availability' : 'Ja' , 'Dekar' : 210 , 'Soil_status' : 'Tørke' ,
'Land' : 'UK' },

{ 'Soil_Type' : 'Annen' , 'Irrigation_availability' : 'Nei' , 'Dekar' : 1000 , 'Soil_status' : 'Våt' ,
'Land' : 'USA' },

{ 'Soil_Type' : 'Sand' , 'Irrigation_availability' : 'Nei' , 'Dekar' : 500 , 'Soil_status' : 'Tørke' ,
'Land' : 'India' }]



# lag datarammen fra dataene ovenfor

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Aggregerte operasjoner

agri_df.selectExpr( 'SUM(Dekar)' , 'MEAN(Dekar)' , 'COUNT(Dekar)' , 'AVG(Dekar)' , 'MIN(Dekar)' ,
'MAX(Dekar)' ).forestilling()

agri_df.selectExpr( 'MIN(jordstatus)' , 'MAX(jordstatus)' ).forestilling()

Produksjon:

Konklusjon

Vi diskuterte om funksjonen selectExpr() som tar kolonnene/settene med uttrykk og returnerer DataFrame basert på de angitte uttrykkene/kolonnene. Som en del av dette lærte vi de fire hovedscenariene der selectExpr() er anvendelig. Flere uttrykk kan spesifiseres i denne funksjonen som er atskilt med komma. Det er ikke nødvendig å lage en TEMPORARY VIEW for å bruke funksjonen selectExpr().