PySpark SelectExpr()

Pyspark Selectexpr



Menggunakan fungsi selectExpr() dalam PySpark, kami boleh menilai secara langsung ungkapan tanpa membuat sebarang JADUAL atau VIEW. Fungsi ini tersedia dalam modul pyspark.sql.DataFrame yang serupa dengan kaedah select(). Dengan selectExpr(), kita boleh memaparkan lajur, menggunakan fungsi pada lajur, menilai ungkapan, melaksanakan operasi pengagregatan, dsb. Ia juga mungkin untuk menilai/menentukan berbilang lajur pada satu masa.

Pyspark.sql.DataFrame.selectExpr()

Fungsi selectexpr() mengambil lajur/set ungkapan dan mengembalikan DataFrame berdasarkan ungkapan/lajur yang ditentukan. Berbilang ungkapan boleh ditentukan dalam fungsi ini yang dipisahkan dengan koma. Untuk memaparkan DataFrame, kita boleh menggunakan fungsi show()/collect().

Sintaks:







pyspark_DataFrame_object.selectExpr('Lajur'/'Ungkapan')

Di sini, pyspark_DataFrame_object ialah input PySpark DataFrame.



Senario 1: Pilih Lajur

Dalam senario ini, kita akan melihat cara memilih lajur tertentu daripada PySpark DataFrame menggunakan fungsi selectExpr().



Ungkapan yang digunakan ialah 'lajur_sedia ada sebagai nama_baru'. Di sini, lajur sedia ada ialah nama lajur yang terdapat dalam DataFrame dan ia dipaparkan sebagai nama_baru (Aliasing).





Contoh:

Buat PySpark DataFrame bernama 'agri_df' dengan 5 baris dan lajur. Dapatkan lajur 'Soil_status' dan 'Soil_Type' sebagai 'STATUS' dan 'TYPE'.

import pyspark

daripada pyspark.sql import SparkSession

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

# data pertanian dengan 5 baris dan 5 lajur

agri =[{ 'Jenis_Tanah' : 'Hitam' , 'Ketersediaan_pengairan' : 'Tidak' , 'Ekar' : 2500 , 'Status_tanah' : 'Kering' ,
'Negara' : 'USA' },

{ 'Jenis_Tanah' : 'Hitam' , 'Ketersediaan_pengairan' : 'Ya' , 'Ekar' : 3500 , 'Status_tanah' : 'Basah' ,
'Negara' : 'India' },

{ 'Jenis_Tanah' : tiada , 'Ketersediaan_pengairan' : 'Ya' , 'Ekar' : 210 , 'Status_tanah' : 'Kering' ,
'Negara' : 'UK' },

{ 'Jenis_Tanah' : 'Lain-lain' , 'Ketersediaan_pengairan' : 'Tidak' , 'Ekar' : 1000 , 'Status_tanah' : 'Basah' ,
'Negara' : 'USA' },

{ 'Jenis_Tanah' : 'Pasir' , 'Ketersediaan_pengairan' : 'Tidak' , 'Ekar' : 500 , 'Status_tanah' : 'Kering' ,
'Negara' : 'India' }]



# buat kerangka data daripada data di atas

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Dapatkan status_tanah dan Jenis_Tanah sebagai 'STATUS' dan 'JENIS'.

agri_df.selectExpr( 'Status_tanah sebagai STATUS' , 'Tanah_Jenis sebagai JENIS' ).tunjukkan()

Pengeluaran:



Senario 2: Menentukan Ungkapan Bersyarat

Dalam senario ini, kita akan melihat cara menilai keadaan dalam fungsi selectExpr().

Ungkapan yang digunakan ialah 'nilai operator lajur sedia ada'. Di sini, existing_column ialah nama lajur yang terdapat dalam DataFrame dan kami membandingkan setiap nilai dalam lajur ini dengan rentetan/nilai.

Contoh 1:

Semak sama ada negara itu 'AS' atau tidak. Operator equalto (=) digunakan di sini.

import pyspark

daripada pyspark.sql import SparkSession

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

# data pertanian dengan 5 baris dan 5 lajur

agri =[{ 'Jenis_Tanah' : 'Hitam' , 'Ketersediaan_pengairan' : 'Tidak' , 'Ekar' : 2500 , 'Status_tanah' : 'Kering' ,
'Negara' : 'USA' },

{ 'Jenis_Tanah' : 'Hitam' , 'Ketersediaan_pengairan' : 'Ya' , 'Ekar' : 3500 , 'Status_tanah' : 'Basah' ,
'Negara' : 'India' },

{ 'Jenis_Tanah' : tiada , 'Ketersediaan_pengairan' : 'Ya' , 'Ekar' : 210 , 'Status_tanah' : 'Kering' ,
'Negara' : 'UK' },

{ 'Jenis_Tanah' : 'Lain-lain' , 'Ketersediaan_pengairan' : 'Tidak' , 'Ekar' : 1000 , 'Status_tanah' : 'Basah' ,
'Negara' : 'USA' },

{ 'Jenis_Tanah' : 'Pasir' , 'Ketersediaan_pengairan' : 'Tidak' , 'Ekar' : 500 , 'Status_tanah' : 'Kering' ,
'Negara' : 'India' }]



# buat kerangka data daripada data di atas

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Semak sama ada negara itu 'USA' atau tidak.

agri_df.selectExpr( 'Negara = 'AS'' ).tunjukkan()

Pengeluaran:

Contoh 2:

Semak sama ada Soil_Type adalah NULL atau tidak. Kata kunci NULL menyemak sama ada nilai adalah NULL atau tidak. Jika ia batal, benar dikembalikan. Jika tidak, palsu dikembalikan. Ungkapan terakhir ialah 'Soil_Type IS NULL'

import pyspark

daripada pyspark.sql import SparkSession

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

# data pertanian dengan 5 baris dan 5 lajur

agri =[{ 'Jenis_Tanah' : 'Hitam' , 'Ketersediaan_pengairan' : 'Tidak' , 'Ekar' : 2500 , 'Status_tanah' : 'Kering' ,
'Negara' : 'USA' },

{ 'Jenis_Tanah' : 'Hitam' , 'Ketersediaan_pengairan' : 'Ya' , 'Ekar' : 3500 , 'Status_tanah' : 'Basah' ,
'Negara' : 'India' },

{ 'Jenis_Tanah' : tiada , 'Ketersediaan_pengairan' : 'Ya' , 'Ekar' : 210 , 'Status_tanah' : 'Kering' ,
'Negara' : 'UK' },

{ 'Jenis_Tanah' : 'Lain-lain' , 'Ketersediaan_pengairan' : 'Tidak' , 'Ekar' : 1000 , 'Status_tanah' : 'Basah' ,
'Negara' : 'USA' },

{ 'Jenis_Tanah' : 'Pasir' , 'Ketersediaan_pengairan' : 'Tidak' , 'Ekar' : 500 , 'Status_tanah' : 'Kering' ,
'Negara' : 'India' }]



# buat kerangka data daripada data di atas

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Semak sama ada Soil_Type adalah NULL atau tidak.

agri_df.selectExpr( 'Jenis_Tanah IS NULL' ).tunjukkan()

Pengeluaran:

Senario 3: Menilai Ungkapan

Dalam senario ini, kita akan melihat bagaimana untuk menentukan ungkapan matematik. Ungkapan yang digunakan ialah 'existing_column mathematical_expression'.

Contoh:

  1. Paparkan lajur 'Ekar' sebenar.
  2. Tambahkan 100 pada lajur 'Ekar'.
  3. Tolak 100 daripada lajur 'Ekar'.
  4. Darab 100 dengan lajur 'Ekar'.
  5. Bahagikan lajur 'Ekar' dengan 100.
import pyspark

daripada pyspark.sql import SparkSession

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

# data pertanian dengan 5 baris dan 5 lajur

agri =[{ 'Jenis_Tanah' : 'Hitam' , 'Ketersediaan_pengairan' : 'Tidak' , 'Ekar' : 2500 , 'Status_tanah' : 'Kering' ,
'Negara' : 'USA' },

{ 'Jenis_Tanah' : 'Hitam' , 'Ketersediaan_pengairan' : 'Ya' , 'Ekar' : 3500 , 'Status_tanah' : 'Basah' ,
'Negara' : 'India' },

{ 'Jenis_Tanah' : tiada , 'Ketersediaan_pengairan' : 'Ya' , 'Ekar' : 210 , 'Status_tanah' : 'Kering' ,
'Negara' : 'UK' },

{ 'Jenis_Tanah' : 'Lain-lain' , 'Ketersediaan_pengairan' : 'Tidak' , 'Ekar' : 1000 , 'Status_tanah' : 'Basah' ,
'Negara' : 'USA' },

{ 'Jenis_Tanah' : 'Pasir' , 'Ketersediaan_pengairan' : 'Tidak' , 'Ekar' : 500 , 'Status_tanah' : 'Kering' ,
'Negara' : 'India' }]



# buat kerangka data daripada data di atas

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Tulis 4 Ungkapan untuk menolak, menambah, membahagi dan mendarab lajur Ekar.

agri_df.selectExpr( 'Ekar' , 'Ekar - 100' , 'Ekar * 100' , 'Ekar + 100' , 'Ekar / 100' ).tunjukkan()

Pengeluaran:

Senario 4: Menggunakan Fungsi Agregat

SUM(nama_lajur) – Ia menilai jumlah nilai dalam lajur yang ditentukan.

MEAN(nama_lajur) – Ia menilai nilai purata dalam lajur yang ditentukan.

MIN(nama_lajur) – Ia mengembalikan elemen minimum antara semua elemen dalam lajur yang ditentukan.

MAX(nama_lajur) – Ia mengembalikan elemen maksimum antara semua elemen dalam lajur yang ditentukan.

Contoh:

  1. Cari jumlah, purata, kiraan, minimum dan elemen maksimum 'Ekar'.
  2. Cari elemen minimum dan maksimum dalam lajur 'Soil_status'.
import pyspark

daripada pyspark.sql import SparkSession

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

# data pertanian dengan 5 baris dan 5 lajur

agri =[{ 'Jenis_Tanah' : 'Hitam' , 'Ketersediaan_pengairan' : 'Tidak' , 'Ekar' : 2500 , 'Status_tanah' : 'Kering' ,
'Negara' : 'USA' },

{ 'Jenis_Tanah' : 'Hitam' , 'Ketersediaan_pengairan' : 'Ya' , 'Ekar' : 3500 , 'Status_tanah' : 'Basah' ,
'Negara' : 'India' },

{ 'Jenis_Tanah' : tiada , 'Ketersediaan_pengairan' : 'Ya' , 'Ekar' : 210 , 'Status_tanah' : 'Kering' ,
'Negara' : 'UK' },

{ 'Jenis_Tanah' : 'Lain-lain' , 'Ketersediaan_pengairan' : 'Tidak' , 'Ekar' : 1000 , 'Status_tanah' : 'Basah' ,
'Negara' : 'USA' },

{ 'Jenis_Tanah' : 'Pasir' , 'Ketersediaan_pengairan' : 'Tidak' , 'Ekar' : 500 , 'Status_tanah' : 'Kering' ,
'Negara' : 'India' }]



# buat kerangka data daripada data di atas

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Operasi agregat

agri_df.selectExpr( 'SUM(Ekar)' , 'MEAN(Ekar)' , 'COUNT(Ekar)' , 'AVG(Ekar)' , 'MIN(Ekar)' ,
'MAX(Ekar)' ).tunjukkan()

agri_df.selectExpr( 'MIN(status_tanah)' , 'MAX(Status_Tanah)' ).tunjukkan()

Pengeluaran:

Kesimpulan

Kami membincangkan tentang fungsi selectExpr() yang mengambil lajur/set ungkapan dan mengembalikan DataFrame berdasarkan ungkapan/lajur yang ditentukan. Sebagai sebahagian daripada ini, kami mempelajari empat senario utama di mana selectExpr() boleh digunakan. Berbilang ungkapan boleh ditentukan dalam fungsi ini yang dipisahkan dengan koma. Tidak perlu mencipta TEMPORARY VIEW untuk menggunakan fungsi selectExpr().