Belajar PySpark - Select, Filter dan Where Pada DataFrame

belajar-apchespark-selectfilter

Setelah dalam seri Belajar Pyspark sebelumnya kita mempelajari sekilas mengenai DataFrame, dalam artikel ini kita akan mempelajari mengenai berbagai cara memfilter DataFrame.

Salah satu operasi yang paling banyak dilakukan dalam pengolahan data adalah memilih kolom, serta memilih baris atau record dengan bermacam-macam kondisi.

Artikel ini membahas mengenai berbagai cara melakukan filtering records pada Spark DataFrame. Fungsi-fungsi yang akan kita gunakan diantaranya adalah fungsi select(), filter() dan where(). Kita juga akan menggunakan fungsi-fungsi kolom yang lain, seperti isin(), contains(), like(), dll.

Berikut adalah package yang akan kita gunakan dalam artikel ini

from pyspark.sql import SparkSession
from pyspark.sql import functions as F

 

Create session, dengan nama 'Belajar PySpark - Filter' :

spark = SparkSession.builder.appName('Belajar PySpark - Filter').getOrCreate()

 

Selanjutnya kita buat  DataFrame dengan menggunakan Python list

data = [['Agus','Fisika',100],['Ani','Biologi',200],
    	 ['Budi','Biologi',200],['Dina','Fisika',150],
    	 ['Bayu','Fisika',50],['Dedi','Biologi',50]]

kolom = ['nama','jurusan','nilai']

df = spark.createDataFrame(data,kolom)
df.show()

output pyspark dataframe 1

 

Memilih kolom pyspark DataFrame dengan select()

Fungsi select() digunakan untuk memilih kolom-kolom tertentu dari sebuah DataFrame. Sintaksnya adalah

df.select(list nama kolom yang akan dipilih)

Sebagai contoh kita akan menampilkan kolom nama dan nilai, maka dapat ditulis sebagai berikut:

df.select(['nama', 'nilai']).show()

output select()

 

Fungsi filter() pada pyspark DataFrame

Fungsi filter() menerima parameter kondisi berupa ekspresi logika. Sintaks secara umum adalah sebagai berikut:

df.filter(kondisi)

 

Fungsi filter DataFrame dengan satu kondisi

 

Berikut ini merupakan contoh penggunaan fungsi filter untuk satu kondisi. Dari DataFrame yang telah dibuat, kita akan melakukan filtering record yang memiliki nilai lebih besar dari 150.

df.filter(df.nilai > 150).show()

output filter 1 kondisi

 

Fungsi filter DataFrame dengan beberapa kondisi

Untuk menggabungkan beberapa kondisi, digunakan operasi logika '&' (AND) ataupun '|' (OR). Perhatikan bahwa masing-masing statement logika dikelompokkan dengan tanda kurung.

df.filter((df.nilai > 150) &
      	(df.jurusan == 'Fisika')).show()

output filter multi kondisi

 

Fungsi filter DataFrame dengan menggunakan list

Jika kita memiliki sebuah list, dan kita perlu memfilter record berdasarkan elemen dalam list tersebut, kita bisa menggunakan fungsi isin()

df.filter(df.nilai.isin([50,150])).show()

output filter dengan isin()

Selain menggunakan list sebagai kriteria inklusi (whitelist), kita juga dapat menggunakan list sebagai kriteria eksklusi (blacklist), dengan menambahkan tanda negasi.

Tanda negasi pada pyspark adalah ~

df.filter(~df.nilai.isin([50,150])).show()

output filter dengan ~isin()

 

Fungsi filter DataFrame dengan komparasi string

Untuk kondisi menggunakan kolom berupa string, terdapat beberapa fungsi kolom DataFrame, diantaranya startswith(), endswith(), dan contains()

Fungsi startswith() digunakan untuk memilih records dengan nilai suatu kolom berawalan string tertentu

df.filter(df.nama.startswith('D')).show()

output filter dengan startswith()

Fungsi endswith() digunakan untuk memilih records dengan nilai suatu kolom berakhiran string tertentu

df.filter(df.nama.endswith('di')).show()

output filter dengan endswith()

Fungsi contains() digunakan untuk memilih records dengan nilai suatu kolom mengandung string tertentu

df.filter(df.nama.contains('in')).show()

output filter dengan contains()

Kita juga dapat melakukan filtering dengan menggunakan fungsi like(), yang serupa dengan LIKE pada perintah SQL.

df.filter(df.nama.like('%in%')).show()

output filter dengan like

 

Fungsi where pada pyspark DataFrame

Kita dapat melakukan filtering baris dengan menggunakan fungsi where().

Filter dengan fungsi where() tidak berbeda sintaksnya dengan fungsi filter(), dan keluarannya pun sama dengan filter().

df.where(df.nilai > 150).show()

output filtering dengan where()

untuk filtering dengan beberapa kondisi:

df.where((df.nilai > 150) &
      	(df.jurusan == 'Fisika')).show()

output filtering dengan where dan multikondisi

filtering dengan fungsi komparasi string:

df.where(df.nama.contains('in')).show()

output filtering dengan where dan contains

 

Cara akses kolom DataFrame, antara "df.", "df[]' dan "col()"

Pada contoh-contoh di atas kita mengacu atau mengakses kolom DataFrame dengan menggunakan titik, yaitu dengan sintaks df.nilai.

Hal ini hanya dapat dilakukan jika nama kolom tidak mengandung spasi. Jika nama kolom mengandung spasi, misalnya "nilai total", maka kita dapat mengacu kolom tersebut dengan menggunakan kurung siku, dalam hal ini df["nilai total"]

data = [['Agus','Fisika',100],['Windy','Fisika',200],
        ['Budi','Biologi',200],['Dina','Fisika',150],
        ['Bayu','Fisika',50],['Dedi','Biologi',50]]

kolom_1 = ['nama','jurusan','nilai total']

df_1 = spark.createDataFrame(data,kolom_1)

df_1.filter(df_1['nilai total'] > 150).show()

akses kolom dataframe dengan kurung siku

Dengan menggunakan sintaks ini, kita dapat mengakses beberapa kolom sekaligus, dengan memberikan parameter berupa list nama-nama kolom

df_1[['nama','nilai total']].show()

output akses kolom dengan list nama

Kita juga dapat mengacu sebuah kolom dengan menggunakan fungsi pyspark.sql.functions.col seperti berikut ini

df_1.filter(F.col('nilai total') > 150).show()

output akses kolom dengan col()

 

Notebook untuk artikel ini dapat diakses di sini

Artikel sebelumnya : Mengenal DataFrame