PySpark SelectExpr()

Pyspark Selectexpr



Pomocou funkcie selectExpr() v PySpark môžeme priamo vyhodnotiť výraz bez vytvárania akejkoľvek TABLE alebo VIEW. Táto funkcia je dostupná v module pyspark.sql.DataFrame, ktorý je podobný metóde select(). Pomocou selectExpr() môžeme zobraziť stĺpce, aplikovať funkcie na stĺpce, vyhodnocovať výrazy, vykonávať agregačné operácie atď. Je tiež možné vyhodnocovať/špecifikovať viacero stĺpcov naraz.

Pyspark.sql.DataFrame.selectExpr()

Funkcia selectexpr() berie stĺpce/množinu výrazov a vracia DataFrame na základe špecifikovaných výrazov/stĺpcov. V tejto funkcii je možné zadať viacero výrazov, ktoré sú oddelené čiarkou. Na zobrazenie DataFrame môžeme použiť funkcie show()/collect().

Syntax:







pyspark_DataFrame_object.selectExpr(“Stĺpce”/”Výrazy”)

Tu je objekt pyspark_DataFrame_object vstupným objektom PySpark DataFrame.



Scenár 1: Vyberte stĺpce

V tomto scenári uvidíme, ako vybrať konkrétne stĺpce z dátového rámca PySpark pomocou funkcie selectExpr().



Použitý výraz je „existujúci_stĺpec ako nový_názov“. Existujúci_stĺpec je tu názov stĺpca, ktorý je prítomný v DataFrame a zobrazuje sa ako nový_názov (Aliasing).





Príklad:

Vytvorte dátový rámec PySpark s názvom „agri_df“ s 5 riadkami a stĺpcami. Získajte stĺpce „Soil_status“ a „Soil_Type“ ako „STATUS“ a „TYPE“.

importovať pyspark

z pyspark.sql importujte SparkSession

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

# farmárske údaje s 5 riadkami a 5 stĺpcami

agri =[{ 'Soil_Type' : 'Čierna' , 'Irigation_availability' : 'nie' , 'Acres' : 2500 , 'Soil_status' : 'suchý' ,
'Krajina' : 'USA' },

{ 'Soil_Type' : 'Čierna' , 'Irigation_availability' : 'Áno' , 'Acres' : 3500 , 'Soil_status' : 'mokrý' ,
'Krajina' : 'India' },

{ 'Soil_Type' : žiadne , 'Irigation_availability' : 'Áno' , 'Acres' : 210 , 'Soil_status' : 'suchý' ,
'Krajina' : 'UK' },

{ 'Soil_Type' : 'iné' , 'Irigation_availability' : 'nie' , 'Acres' : 1000 , 'Soil_status' : 'mokrý' ,
'Krajina' : 'USA' },

{ 'Soil_Type' : 'piesok' , 'Irigation_availability' : 'nie' , 'Acres' : 500 , 'Soil_status' : 'suchý' ,
'Krajina' : 'India' }]



# vytvorte dátový rámec z vyššie uvedených údajov

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Získajte Soil_status a Soil_Type ako 'STATUS' a 'TYPE'.

agri_df.selectExpr( 'Soil_status as STATUS' , 'Soil_Type ako TYPE' ).šou()

Výkon:



Scenár 2: Určenie podmienených výrazov

V tomto scenári uvidíme, ako vyhodnotiť podmienky v rámci funkcie selectExpr().

Výraz, ktorý sa používa, je „hodnota operátora existujúceho_stĺpca“. V tomto prípade je existujúci_stĺpec názov stĺpca, ktorý sa nachádza v dátovom rámci a každú hodnotu v tomto stĺpci porovnávame s reťazcom/hodnotou.

Príklad 1:

Skontrolujte, či je krajina „USA“ alebo nie. Používa sa tu operátor rovná sa (=).

importovať pyspark

z pyspark.sql importujte SparkSession

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

# farmárske údaje s 5 riadkami a 5 stĺpcami

agri =[{ 'Soil_Type' : 'Čierna' , 'Irigation_availability' : 'nie' , 'Acres' : 2500 , 'Soil_status' : 'suchý' ,
'Krajina' : 'USA' },

{ 'Soil_Type' : 'Čierna' , 'Irigation_availability' : 'Áno' , 'Acres' : 3500 , 'Soil_status' : 'mokrý' ,
'Krajina' : 'India' },

{ 'Soil_Type' : žiadne , 'Irigation_availability' : 'Áno' , 'Acres' : 210 , 'Soil_status' : 'suchý' ,
'Krajina' : 'UK' },

{ 'Soil_Type' : 'iné' , 'Irigation_availability' : 'nie' , 'Acres' : 1000 , 'Soil_status' : 'mokrý' ,
'Krajina' : 'USA' },

{ 'Soil_Type' : 'piesok' , 'Irigation_availability' : 'nie' , 'Acres' : 500 , 'Soil_status' : 'suchý' ,
'Krajina' : 'India' }]



# vytvorte dátový rámec z vyššie uvedených údajov

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Skontrolujte, či je krajina „USA“ alebo nie.

agri_df.selectExpr( 'Krajina = 'USA'' ).šou()

Výkon:

Príklad 2:

Skontrolujte, či má Soil_Type hodnotu NULL alebo nie. Kľúčové slovo NULL kontroluje, či je hodnota NULL alebo nie. Ak je hodnota null, vráti sa true. V opačnom prípade sa vráti false. Konečný výraz je „Soil_Type IS NULL“

importovať pyspark

z pyspark.sql importujte SparkSession

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

# farmárske údaje s 5 riadkami a 5 stĺpcami

agri =[{ 'Soil_Type' : 'Čierna' , 'Irigation_availability' : 'nie' , 'Acres' : 2500 , 'Soil_status' : 'suchý' ,
'Krajina' : 'USA' },

{ 'Soil_Type' : 'Čierna' , 'Irigation_availability' : 'Áno' , 'Acres' : 3500 , 'Soil_status' : 'mokrý' ,
'Krajina' : 'India' },

{ 'Soil_Type' : žiadne , 'Irigation_availability' : 'Áno' , 'Acres' : 210 , 'Soil_status' : 'suchý' ,
'Krajina' : 'UK' },

{ 'Soil_Type' : 'iné' , 'Irigation_availability' : 'nie' , 'Acres' : 1000 , 'Soil_status' : 'mokrý' ,
'Krajina' : 'USA' },

{ 'Soil_Type' : 'piesok' , 'Irigation_availability' : 'nie' , 'Acres' : 500 , 'Soil_status' : 'suchý' ,
'Krajina' : 'India' }]



# vytvorte dátový rámec z vyššie uvedených údajov

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Skontrolujte, či je Soil_Type NULL alebo nie.

agri_df.selectExpr( 'Soil_Type IS NULL' ).šou()

Výkon:

Scenár 3: Hodnotenie výrazov

V tomto scenári uvidíme, ako špecifikovať matematické výrazy. Použitý výraz je „existujúci_stĺpec matematický_výraz“.

Príklad:

  1. Zobrazte skutočný stĺpec „Acre“.
  2. Pridajte 100 do stĺpca „Acre“.
  3. Odpočítajte 100 zo stĺpca „Acre“.
  4. Vynásobte 100 stĺpcom „Acre“.
  5. Vydeľte stĺpec „Acre“ číslom 100.
importovať pyspark

z pyspark.sql importujte SparkSession

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

# farmárske údaje s 5 riadkami a 5 stĺpcami

agri =[{ 'Soil_Type' : 'Čierna' , 'Irigation_availability' : 'nie' , 'Acres' : 2500 , 'Soil_status' : 'suchý' ,
'Krajina' : 'USA' },

{ 'Soil_Type' : 'Čierna' , 'Irigation_availability' : 'Áno' , 'Acres' : 3500 , 'Soil_status' : 'mokrý' ,
'Krajina' : 'India' },

{ 'Soil_Type' : žiadne , 'Irigation_availability' : 'Áno' , 'Acres' : 210 , 'Soil_status' : 'suchý' ,
'Krajina' : 'UK' },

{ 'Soil_Type' : 'iné' , 'Irigation_availability' : 'nie' , 'Acres' : 1000 , 'Soil_status' : 'mokrý' ,
'Krajina' : 'USA' },

{ 'Soil_Type' : 'piesok' , 'Irigation_availability' : 'nie' , 'Acres' : 500 , 'Soil_status' : 'suchý' ,
'Krajina' : 'India' }]



# vytvorte dátový rámec z vyššie uvedených údajov

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Napíšte 4 výrazy na odčítanie, sčítanie, delenie a násobenie stĺpca Acres.

agri_df.selectExpr( 'Akry' , 'Akrov - 100' , 'Akrov * 100' , 'Akrov + 100' , 'Akrov / 100' ).šou()

Výkon:

Scenár 4: Použitie agregačných funkcií

SUM(názov_stĺpca) – Vyhodnocuje celkovú hodnotu v zadanom stĺpci.

MEAN(názov_stĺpca) – Vyhodnocuje priemernú hodnotu v zadanom stĺpci.

MIN(názov_stĺpca) – Vráti minimálny prvok spomedzi všetkých prvkov v zadanom stĺpci.

MAX(názov_stĺpca) – Vráti maximálny prvok spomedzi všetkých prvkov v zadanom stĺpci.

Príklad:

  1. Nájdite celkový, priemer, počet, minimum a maximum prvkov „Akrov“.
  2. Nájdite minimum a maximum prvkov v stĺpci „Soil_status“.
importovať pyspark

z pyspark.sql importujte SparkSession

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

# farmárske údaje s 5 riadkami a 5 stĺpcami

agri =[{ 'Soil_Type' : 'Čierna' , 'Irigation_availability' : 'nie' , 'Acres' : 2500 , 'Soil_status' : 'suchý' ,
'Krajina' : 'USA' },

{ 'Soil_Type' : 'Čierna' , 'Irigation_availability' : 'Áno' , 'Acres' : 3500 , 'Soil_status' : 'mokrý' ,
'Krajina' : 'India' },

{ 'Soil_Type' : žiadne , 'Irigation_availability' : 'Áno' , 'Acres' : 210 , 'Soil_status' : 'suchý' ,
'Krajina' : 'UK' },

{ 'Soil_Type' : 'iné' , 'Irigation_availability' : 'nie' , 'Acres' : 1000 , 'Soil_status' : 'mokrý' ,
'Krajina' : 'USA' },

{ 'Soil_Type' : 'piesok' , 'Irigation_availability' : 'nie' , 'Acres' : 500 , 'Soil_status' : 'suchý' ,
'Krajina' : 'India' }]



# vytvorte dátový rámec z vyššie uvedených údajov

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Súhrnné operácie

agri_df.selectExpr( 'SÚČET (akrov)' , 'MEAN(Acres)' , 'POČET (akrov)' , 'AVG (Acres)' , 'MIN (akrov)' ,
'MAX (akry)' ).šou()

agri_df.selectExpr( 'MIN(stav_pôdy)' , 'MAX(stav_pôdy)' ).šou()

Výkon:

Záver

Diskutovali sme o funkcii selectExpr(), ktorá berie stĺpce/množiny výrazov a vracia DataFrame na základe špecifikovaných výrazov/stĺpcov. V rámci toho sme sa naučili štyri hlavné scenáre, v ktorých je selectExpr() použiteľný. V tejto funkcii je možné zadať viacero výrazov, ktoré sú oddelené čiarkou. Na použitie funkcie selectExpr() nie je potrebné vytvárať TEMPORARY VIEW.