PySpark SelectExpr()

Pyspark Selectexpr



PySparkis funktsiooni selectExpr() abil saame avaldist otse hinnata, ilma TABLE-i või VIEW-i loomata. See funktsioon on saadaval moodulis pyspark.sql.DataFrame, mis on sarnane meetodile select(). SelectExpr() abil saame kuvada veerge, rakendada veergudele funktsioone, hinnata avaldisi, sooritada liiteoperatsioone jne. Samuti on võimalik hinnata/määrata mitut veergu korraga.

Pyspark.sql.DataFrame.selectExpr()

Funktsioon selectexpr() võtab veerud/avaldiste komplekti ja tagastab DataFrame'i määratud avaldiste/veergude alusel. Selles funktsioonis saab määrata mitu avaldist, mis eraldatakse komaga. DataFrame'i kuvamiseks saame kasutada show()/collect() funktsioone.

Süntaks:







pyspark_DataFrame_object.selectExpr('Veerud'/'Avaldised'

Siin on pyspark_DataFrame_object sisend PySpark DataFrame.



1. stsenaarium: valige veerud

Selle stsenaariumi korral näeme, kuidas valida PySpark DataFrame'ist konkreetsed veerud, kasutades funktsiooni selectExpr ().



Kasutatav väljend on 'olemasolev_veerg kui uus_nimi'. Siin on olemasolev_veerg veeru nimi, mis on DataFrame'is ja see kuvatakse kui uus_nimi (aliasing).





Näide:

Looge PySpark DataFrame nimega 'agri_df' 5 rea ja veeruga. Hankige veerud 'Soil_status' ja 'Soil_Type' kui 'STATUS' ja 'TYPE'.

import pyspark

pyspark.sql-st importige SparkSession

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

# põllumajandusandmed 5 rea ja 5 veeruga

agri =[{ 'Soil_Type' : 'must' , „Niisutus_kättesaadavus” : 'ei' , 'Aakrid' : 2500 , 'Mulla_status' : 'Kuiv' ,
'Riik' : 'USA' },

{ 'Soil_Type' : 'must' , „Niisutus_kättesaadavus” : 'jah' , 'Aakrid' : 3500 , 'Mulla_status' : 'Märg' ,
'Riik' : 'India' },

{ 'Soil_Type' : Mitte ühtegi , „Niisutus_kättesaadavus” : 'jah' , 'Aakrid' : 210 , 'Mulla_status' : 'Kuiv' ,
'Riik' : 'UK' },

{ 'Soil_Type' : 'muu' , „Niisutus_kättesaadavus” : 'ei' , 'Aakrid' : 1000 , 'Mulla_status' : 'Märg' ,
'Riik' : 'USA' },

{ 'Soil_Type' : 'liiv' , „Niisutus_kättesaadavus” : 'ei' , 'Aakrid' : 500 , 'Mulla_status' : 'Kuiv' ,
'Riik' : 'India' }]



# looge ülaltoodud andmetest andmeraam

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Hankige Soil_status ja Soil_Type kui 'STATUS' ja 'TYPE'.

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

Väljund:



2. stsenaarium: tingimusavaldiste määramine

Selle stsenaariumi korral näeme, kuidas hinnata funktsiooni selectExpr() tingimusi.

Kasutatav avaldis on 'olemasolev_veeru operaatori väärtus'. Siin on olemasolev_veerg veeru nimi, mis sisaldub DataFrame'is ja me võrdleme iga väärtust selles veerus stringi/väärtusega.

Näide 1:

Kontrollige, kas riik on 'USA' või mitte. Siin kasutatakse operaatorit võrdus (=).

import pyspark

pyspark.sql-st importige SparkSession

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

# põllumajandusandmed 5 rea ja 5 veeruga

agri =[{ 'Soil_Type' : 'must' , „Niisutus_kättesaadavus” : 'ei' , 'Aakrid' : 2500 , 'Mulla_seisund' : 'Kuiv' ,
'Riik' : 'USA' },

{ 'Soil_Type' : 'must' , „Niisutus_kättesaadavus” : 'jah' , 'Aakrid' : 3500 , 'Mulla_status' : 'Märg' ,
'Riik' : 'India' },

{ 'Soil_Type' : Mitte ühtegi , „Niisutus_kättesaadavus” : 'jah' , 'Aakrid' : 210 , 'Mulla_status' : 'Kuiv' ,
'Riik' : 'UK' },

{ 'Soil_Type' : 'muu' , „Niisutus_kättesaadavus” : 'ei' , 'Aakrid' : 1000 , 'Mulla_status' : 'Märg' ,
'Riik' : 'USA' },

{ 'Soil_Type' : 'liiv' , „Niisutus_kättesaadavus” : 'ei' , 'Aakrid' : 500 , 'Mulla_status' : 'Kuiv' ,
'Riik' : 'India' }]



# looge ülaltoodud andmetest andmeraam

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Kontrollige, kas riik on 'USA' või mitte.

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

Väljund:

Näide 2:

Kontrollige, kas Soil_Type on NULL või mitte. Märksõna NULL kontrollib, kas väärtus on NULL või mitte. Kui see on null, tagastatakse tõene. Vastasel juhul tagastatakse vale. Lõplik avaldis on 'Soil_Type IS NULL'

import pyspark

pyspark.sql-st importige SparkSession

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

# põllumajandusandmed 5 rea ja 5 veeruga

agri =[{ 'Soil_Type' : 'must' , „Niisutus_kättesaadavus” : 'ei' , 'Aakrid' : 2500 , 'Mulla_status' : 'Kuiv' ,
'Riik' : 'USA' },

{ 'Soil_Type' : 'must' , „Niisutus_kättesaadavus” : 'jah' , 'Aakrid' : 3500 , 'Mulla_status' : 'Märg' ,
'Riik' : 'India' },

{ 'Soil_Type' : Mitte ühtegi , „Niisutus_kättesaadavus” : 'jah' , 'Aakrid' : 210 , 'Mulla_status' : 'Kuiv' ,
'Riik' : 'UK' },

{ 'Soil_Type' : 'muu' , „Niisutus_kättesaadavus” : 'ei' , 'Aakrid' : 1000 , 'Mulla_status' : 'Märg' ,
'Riik' : 'USA' },

{ 'Soil_Type' : 'liiv' , „Niisutus_kättesaadavus” : 'ei' , 'Aakrid' : 500 , 'Mulla_status' : 'Kuiv' ,
'Riik' : 'India' }]



# looge ülaltoodud andmetest andmeraam

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Kontrollige, kas mulla_tüüp on NULL või mitte.

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

Väljund:

3. stsenaarium: väljendite hindamine

Selle stsenaariumi korral näeme, kuidas matemaatilisi avaldisi täpsustada. Kasutatav avaldis on 'olemasolev_veeru matemaatiline_avaldis'.

Näide:

  1. Kuvage tegelik veerg 'Acres'.
  2. Lisage veergu „Aakrid” 100.
  3. Lahutage veerust „Aakrid” 100.
  4. Korrutage 100 veeruga 'Aakrid'.
  5. Jagage veerg 'Aakrid' 100-ga.
import pyspark

pyspark.sql-st importige SparkSession

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

# põllumajandusandmed 5 rea ja 5 veeruga

agri =[{ 'Soil_Type' : 'must' , „Niisutus_kättesaadavus” : 'ei' , 'Aakrid' : 2500 , 'Mulla_status' : 'Kuiv' ,
'Riik' : 'USA' },

{ 'Soil_Type' : 'must' , „Niisutus_kättesaadavus” : 'jah' , 'Aakrid' : 3500 , 'Mulla_status' : 'Märg' ,
'Riik' : 'India' },

{ 'Soil_Type' : Mitte ühtegi , „Niisutus_kättesaadavus” : 'jah' , 'Aakrid' : 210 , 'Mulla_status' : 'Kuiv' ,
'Riik' : 'UK' },

{ 'Soil_Type' : 'muu' , „Niisutus_kättesaadavus” : 'ei' , 'Aakrid' : 1000 , 'Mulla_status' : 'Märg' ,
'Riik' : 'USA' },

{ 'Soil_Type' : 'liiv' , „Niisutus_kättesaadavus” : 'ei' , 'Aakrid' : 500 , 'Mulla_status' : 'Kuiv' ,
'Riik' : 'India' }]



# looge ülaltoodud andmetest andmeraam

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Kirjutage veeru Acres lahutamiseks, liitmiseks, jagamiseks ja korrutamiseks 4 avaldist.

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

Väljund:

4. stsenaarium: koondfunktsioonide rakendamine

SUM(veeru_nimi) – See hindab määratud veerus koguväärtust.

MEAN(veeru_nimi) – See hindab määratud veeru keskmist väärtust.

MIN(veeru_nimi) – Tagastab minimaalse elemendi kõigi määratud veeru elementide hulgas.

MAX(veeru_nimi) – Tagastab maksimaalse elemendi kõigi määratud veeru elementide hulgas.

Näide:

  1. Leidke 'Acres' kogu-, keskmine, loendus-, miinimum- ja maksimumelemendid.
  2. Leidke veerust „Soil_status” minimaalsed ja maksimaalsed elemendid.
import pyspark

pyspark.sql-st importige SparkSession

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

# põllumajandusandmed 5 rea ja 5 veeruga

agri =[{ 'Soil_Type' : 'must' , 'Niisutus_kättesaadavus' : 'ei' , 'Aakrid' : 2500 , 'Mulla_status' : 'Kuiv' ,
'Riik' : 'USA' },

{ 'Soil_Type' : 'must' , 'Niisutus_kättesaadavus' : 'jah' , 'Aakrid' : 3500 , 'Mulla_status' : 'Märg' ,
'Riik' : 'India' },

{ 'Soil_Type' : Mitte ühtegi , 'Niisutus_kättesaadavus' : 'jah' , 'Aakrid' : 210 , 'Mulla_status' : 'Kuiv' ,
'Riik' : 'UK' },

{ 'Soil_Type' : 'muu' , 'Niisutus_kättesaadavus' : 'ei' , 'Aakrid' : 1000 , 'Mulla_status' : 'Märg' ,
'Riik' : 'USA' },

{ 'Soil_Type' : 'liiv' , 'Niisutus_kättesaadavus' : 'ei' , 'Aakrid' : 500 , 'Mulla_status' : 'Kuiv' ,
'Riik' : 'India' }]



# looge ülaltoodud andmete põhjal andmeraam

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Koondtoimingud

agri_df.selectExpr( 'SUM (aakrid)' , 'KESKMINE (Aakrid)' , 'COUNT (aakrit)' , 'AVG (aakrid)' , 'MIN (aakrit)' ,
'MAX (aakrid)' ).show()

agri_df.selectExpr( 'MIN(mulla_seisund)' , 'MAX (mulla_staatus)' ).show()

Väljund:

Järeldus

Arutasime funktsiooni selectExpr() üle, mis võtab veerud/avaldiste komplektid ja tagastab DataFrame'i määratud avaldiste/veergude alusel. Selle osana õppisime neli peamist stsenaariumit, mille puhul valikExpr() on rakendatav. Selles funktsioonis saab määrata mitu avaldist, mis eraldatakse komaga. Funktsiooni selectExpr() kasutamiseks ei ole vaja luua ajutist vaadet.