
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()
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()
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()
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()
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()
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()
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()
Fungsi endswith() digunakan untuk memilih records dengan nilai suatu kolom berakhiran string tertentu
df.filter(df.nama.endswith('di')).show()
Fungsi contains() digunakan untuk memilih records dengan nilai suatu kolom mengandung string tertentu
df.filter(df.nama.contains('in')).show()
Kita juga dapat melakukan filtering dengan menggunakan fungsi like(), yang serupa dengan LIKE pada perintah SQL.
df.filter(df.nama.like('%in%')).show()
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()
untuk filtering dengan beberapa kondisi:
df.where((df.nilai > 150) &
(df.jurusan == 'Fisika')).show()
filtering dengan fungsi komparasi string:
df.where(df.nama.contains('in')).show()
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()
Dengan menggunakan sintaks ini, kita dapat mengakses beberapa kolom sekaligus, dengan memberikan parameter berupa list nama-nama kolom
df_1[['nama','nilai total']].show()
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()
Notebook untuk artikel ini dapat diakses di sini
Artikel sebelumnya : Mengenal DataFrame