PySpark SelectExpr()

Pyspark Selectexpr



Genom att använda funktionen selectExpr() i PySpark kan vi direkt utvärdera ett uttryck utan att skapa någon TABLE eller VIEW. Den här funktionen är tillgänglig i modulen pyspark.sql.DataFrame som liknar metoden select(). Med selectExpr() kan vi visa kolumnerna, tillämpa funktionerna på kolumnerna, utvärdera uttrycken, utföra aggregeringsoperationer, etc. Det är också möjligt att utvärdera/specificera flera kolumner åt gången.

Pyspark.sql.DataFrame.selectExpr()

Funktionen selectexpr() tar kolumnerna/uppsättningen uttryck och returnerar DataFrame baserat på de angivna uttrycken/kolumnerna. Flera uttryck kan anges i den här funktionen som är separerade med kommatecken. För att visa DataFrame kan vi använda funktionerna show()/collect().

Syntax:







pyspark_DataFrame_object.selectExpr(”Kolumner”/”Uttryck”)

Här är pyspark_DataFrame_object indata PySpark DataFrame.



Scenario 1: Välj kolumnerna

I det här scenariot kommer vi att se hur man väljer de specifika kolumnerna från PySpark DataFrame med hjälp av selectExpr()-funktionen.



Uttrycket som används är 'existing_column as new_name'. Här är existerande_kolumnen kolumnnamnet som finns i DataFrame och det visas som nytt_namn (Aliasing).





Exempel:

Skapa en PySpark DataFrame med namnet 'agri_df' med 5 rader och kolumner. Hämta kolumnerna 'Soil_status' och 'Soil_Type' som 'STATUS' och 'TYPE'.

importera pyspark

från pyspark.sql importera SparkSession

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

# jordbruksdata med 5 rader och 5 kolumner

agri =[{ 'Soil_Type' : 'Svart' , 'Irrigation_availability' : 'Nej' , 'Acres' : 2500 , 'Soil_status' : 'Torr' ,
'Land' : 'USA' },

{ 'Soil_Type' : 'Svart' , 'Irrigation_availability' : 'Ja' , 'Acres' : 3500 , 'Soil_status' : 'Våt' ,
'Land' : 'Indien' },

{ 'Soil_Type' : Ingen , 'Irrigation_availability' : 'Ja' , 'Acres' : 210 , 'Soil_status' : 'Torr' ,
'Land' : 'STORBRITANNIEN' },

{ 'Soil_Type' : 'Övrig' , 'Irrigation_availability' : 'Nej' , 'Acres' : 1000 , 'Soil_status' : 'Våt' ,
'Land' : 'USA' },

{ 'Soil_Type' : 'Sand' , 'Irrigation_availability' : 'Nej' , 'Acres' : 500 , 'Soil_status' : 'Torr' ,
'Land' : 'Indien' }]



# skapa dataramen från ovanstående data

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Hämta Soil_status och Soil_Type som 'STATUS' och 'TYPE'.

agri_df.selectExpr( 'Mark_status som STATUS' , 'Soil_Type as TYPE' ).show()

Produktion:



Scenario 2: Specificering av de villkorliga uttrycken

I det här scenariot kommer vi att se hur man utvärderar villkoren i selectExpr()-funktionen.

Uttrycket som används är 'existing_column operator value'. Här är existerande_kolumn kolumnnamnet som finns i DataFrame och vi jämför varje värde i denna kolumn med strängen/värdet.

Exempel 1:

Kontrollera om landet är 'USA' eller inte. Operatorn equalto (=) används här.

importera pyspark

från pyspark.sql importera SparkSession

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

# jordbruksdata med 5 rader och 5 kolumner

agri =[{ 'Soil_Type' : 'Svart' , 'Irrigation_availability' : 'Nej' , 'Acres' : 2500 , 'Soil_status' : 'Torr' ,
'Land' : 'USA' },

{ 'Soil_Type' : 'Svart' , 'Irrigation_availability' : 'Ja' , 'Acres' : 3500 , 'Soil_status' : 'Våt' ,
'Land' : 'Indien' },

{ 'Soil_Type' : Ingen , 'Irrigation_availability' : 'Ja' , 'Acres' : 210 , 'Soil_status' : 'Torr' ,
'Land' : 'STORBRITANNIEN' },

{ 'Soil_Type' : 'Övrig' , 'Irrigation_availability' : 'Nej' , 'Acres' : 1000 , 'Soil_status' : 'Våt' ,
'Land' : 'USA' },

{ 'Soil_Type' : 'Sand' , 'Irrigation_availability' : 'Nej' , 'Acres' : 500 , 'Soil_status' : 'Torr' ,
'Land' : 'Indien' }]



# skapa dataramen från ovanstående data

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Kontrollera om landet är 'USA' eller inte.

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

Produktion:

Exempel 2:

Kontrollera om Soil_Type är NULL eller inte. Nyckelordet NULL kontrollerar om värdet är NULL eller inte. Om den är null returneras true. Annars returneras false. Det slutliga uttrycket är 'Soil_Type IS NULL'

importera pyspark

från pyspark.sql importera SparkSession

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

# jordbruksdata med 5 rader och 5 kolumner

agri =[{ 'Soil_Type' : 'Svart' , 'Irrigation_availability' : 'Nej' , 'Acres' : 2500 , 'Soil_status' : 'Torr' ,
'Land' : 'USA' },

{ 'Soil_Type' : 'Svart' , 'Irrigation_availability' : 'Ja' , 'Acres' : 3500 , 'Soil_status' : 'Våt' ,
'Land' : 'Indien' },

{ 'Soil_Type' : Ingen , 'Irrigation_availability' : 'Ja' , 'Acres' : 210 , 'Soil_status' : 'Torr' ,
'Land' : 'STORBRITANNIEN' },

{ 'Soil_Type' : 'Övrig' , 'Irrigation_availability' : 'Nej' , 'Acres' : 1000 , 'Soil_status' : 'Våt' ,
'Land' : 'USA' },

{ 'Soil_Type' : 'Sand' , 'Irrigation_availability' : 'Nej' , 'Acres' : 500 , 'Soil_status' : 'Torr' ,
'Land' : 'Indien' }]



# skapa dataramen från ovanstående data

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Kontrollera om Soil_Type är NULL eller inte.

agri_df.selectExpr( 'Soil_Type IS NULL' ).show()

Produktion:

Scenario 3: Utvärdering av uttrycken

I det här scenariot kommer vi att se hur man anger de matematiska uttrycken. Uttrycket som används är 'existing_column matematical_expression'.

Exempel:

  1. Visa den faktiska kolumnen 'Acres'.
  2. Lägg till 100 i kolumnen 'Acres'.
  3. Subtrahera 100 från kolumnen 'Acres'.
  4. Multiplicera 100 med kolumnen 'Acres'.
  5. Dela kolumnen 'Acres' med 100.
importera pyspark

från pyspark.sql importera SparkSession

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

# jordbruksdata med 5 rader och 5 kolumner

agri =[{ 'Soil_Type' : 'Svart' , 'Irrigation_availability' : 'Nej' , 'Acres' : 2500 , 'Soil_status' : 'Torr' ,
'Land' : 'USA' },

{ 'Soil_Type' : 'Svart' , 'Irrigation_availability' : 'Ja' , 'Acres' : 3500 , 'Soil_status' : 'Våt' ,
'Land' : 'Indien' },

{ 'Soil_Type' : Ingen , 'Irrigation_availability' : 'Ja' , 'Acres' : 210 , 'Soil_status' : 'Torr' ,
'Land' : 'STORBRITANNIEN' },

{ 'Soil_Type' : 'Övrig' , 'Irrigation_availability' : 'Nej' , 'Acres' : 1000 , 'Soil_status' : 'Våt' ,
'Land' : 'USA' },

{ 'Soil_Type' : 'Sand' , 'Irrigation_availability' : 'Nej' , 'Acres' : 500 , 'Soil_status' : 'Torr' ,
'Land' : 'Indien' }]



# skapa dataramen från ovanstående data

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Skriv 4 uttryck för att subtrahera, addera, dividera och multiplicera Acres-kolumnen.

agri_df.selectExpr( 'Acres' , 'Acres - 100' , 'Acres * 100' , 'Acres + 100' , 'Acres / 100' ).show()

Produktion:

Scenario 4: Tillämpa aggregerade funktioner

SUM(kolumnnamn) – Den utvärderar det totala värdet i den angivna kolumnen.

MEAN(kolumnnamn) – Den utvärderar medelvärdet i den angivna kolumnen.

MIN(kolumnnamn) – Den returnerar minimielementet bland alla element i den angivna kolumnen.

MAX(kolumnnamn) – Det returnerar det maximala elementet bland alla element i den angivna kolumnen.

Exempel:

  1. Hitta de totala, genomsnittliga, antal, minsta och högsta elementen för 'Acres'.
  2. Hitta minimum- och maximumelementen i kolumnen 'Soil_status'.
importera pyspark

från pyspark.sql importera SparkSession

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

# jordbruksdata med 5 rader och 5 kolumner

agri =[{ 'Soil_Type' : 'Svart' , 'Irrigation_availability' : 'Nej' , 'Acres' : 2500 , 'Soil_status' : 'Torr' ,
'Land' : 'USA' },

{ 'Soil_Type' : 'Svart' , 'Irrigation_availability' : 'Ja' , 'Acres' : 3500 , 'Soil_status' : 'Våt' ,
'Land' : 'Indien' },

{ 'Soil_Type' : Ingen , 'Irrigation_availability' : 'Ja' , 'Acres' : 210 , 'Soil_status' : 'Torr' ,
'Land' : 'STORBRITANNIEN' },

{ 'Soil_Type' : 'Övrig' , 'Irrigation_availability' : 'Nej' , 'Acres' : 1000 , 'Soil_status' : 'Våt' ,
'Land' : 'USA' },

{ 'Soil_Type' : 'Sand' , 'Irrigation_availability' : 'Nej' , 'Acres' : 500 , 'Soil_status' : 'Torr' ,
'Land' : 'Indien' }]



# skapa dataramen från ovanstående data

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Aggregerade operationer

agri_df.selectExpr( 'SUM(Acres)' , 'MEDEL(Acres)' , 'COUNT(Acres)' , 'AVG(Acres)' , 'MIN(Acres)' ,
'MAX(Acres)' ).show()

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

Produktion:

Slutsats

Vi diskuterade om funktionen selectExpr() som tar kolumnerna/uppsättningarna av uttryck och returnerar DataFrame baserat på de angivna uttrycken/kolumnerna. Som en del av detta lärde vi oss de fyra stora scenarierna där selectExpr() är tillämplig. Flera uttryck kan anges i den här funktionen som är separerade med kommatecken. Det finns inget behov av att skapa en TEMPORARY VIEW för att använda selectExpr()-funktionen.