Belajar PySpark : Transformasi Dataframe dengan When-Otherwise

Pada artikel sebelumnya sudah dibahas tentang filter pyspark DataFrame dengan fungsi withColumn, maka kali ini kita akan belajar mengenai penggunaan fungsi when dan otherwise.

Fungsi when dan otherwise digunakan untuk memilih sebuah nilai dengan melakukan pengecekan beberapa kondisi secara bertahap. Fungsi ini serupa dengan ekspresi CASE WHEN dalam perintah SQL. Penerapannya yang paling sering adalah untuk menambahkan kolom baru berdasarkan nilai kolom-kolom lain yang sudah ada.

Sintaks rangkaian when-otherwise adalah sebagai berikut :

F.when(kondisi_1, output_1)
.when(kondisi_2, output_2)
…
.when(kondisi_N, output_N)
.otherwise(output_default))

Perhatikan bahwa dalam rangkain kode di atas kita memanggil 2 jenis fungsi when() yang berbeda.

  • Fungsi when pertama adalah fungsi dari package pyspark.sql.functions Pada contoh di atas kita memanggilnya dengan F.when() karena kita melakukan import pyspark.sql.functions sebagai F dengan perintah pyspark.sql.functions as F
  • Fungsi when kedua dan seterusnya adalah fungsi dari object pyspark.sql.Column.

Meskipun demikian, kedua fungsi tersebut melakukan hal yang sama, yaitu menerima parameter berupa kondisi, dan mengembalikan object bertipe Column.

Pada artikel ini kita akan membahas 3 cara menambahkan kolom baru di Spark DataFrame berdasar kolom yang sudah ada, yaitu :

  • Menggunakan withColumn dan when-otherwise
  • Menggunakan select dan when-otherwise
  • Menggunakan select dan when-otherwise untuk menambahkan beberapa kolom sekaligus

Berikut adalah package yang akan kita gunakan dalam artikel ini:

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

Selanjutnya kita buat object SparkSession dengan nama aplikasi ‘Belajar Pyspark – When Otherwise’.

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

DataFrame yang akan kita gunakan adalah sebagai berikut:

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

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

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

(gb 1)

Kita akan menambahkan satu kolom bernama ‘level‘, berdasar kolom ‘nilai‘, dengan aturan:

  • Jika nilai kurang dari 100 maka level = ‘Low’.
  • Jika nilai antara 100 sampai kurang dari 150 maka level = ‘Medium’.
  • Jika nilai 150 ke atas maka level = ‘High’.

Menambah kolom baru dengan withColumn dan when-otherwise

Cara pertama adalah kita menggunakan fungsi withColumn() yang digabungkan dengan fungsi-fungsi when() dan otherwise().

Sintaks withColumn dengan when-otherwise adalah :

df.withColumn(nama_kolom, ekspresi-when-otherwise)
df.withColumn("level", F.when(df.nilai < 100,"Low")
                             	.when(df.nilai < 150,"Medium")
                             	.otherwise("High")).show()

(gb 2)

Menambah kolom baru dengan select() dan when-otherwise

Selain menggunakan withColumn(), kita bisa juga menggunakan fungsi select() untuk mengembalikan kolom-kolom tertentu.

Fungsi select menerima satu atau lebih parameter bertipe Column, sintaksnya adalah sebagai berikut : df.select(*cols)

df.select(F.when(df.nilai < 100,"Low")
    .when(df.nilai < 150,"Medium")
    .otherwise("High")).show()

(gb 3)

Untuk menentukan nama kolom yang baru, kita menggunakan fungsi spark.sql.Column.alias. Untuk menyertakan kolom-kolom lain digunakan fungsi spark.sql.functions.cols

df.select(F.col("*"), F.when(df.nilai < 100,"Low")
                   	.when(df.nilai < 150,"Medium")
                   	.otherwise("High")
    .alias("level")).show()

(gb 4)

Menambah beberapa kolom baru pada DataFrame dengan select() dan when-otherwise

Dengan menggunakan perintah select, kita bisa menggunakan beberapa ekspresi when-otherwise untuk membuat beberapa kolom baru sekaligus.

df.select(list_kolom, ekspresi1, ekspresi2)

data2 = [['Agus','Fisika',100,180],['Windy','Fisika',200,100],
    	['Budi','Biologi',200,150],['Dina','Fisika',140,200],
    	['Bayu','Fisika',50,30],['Dedi','Biologi',50,180]]

kolom = ['nama','jurusan','nilai1','nilai2']

df2 = spark.createDataFrame(data2,kolom)

expr1 = F.when(df2.nilai1<150,"Low").otherwise("High").alias("level1")
expr2 = F.when(df2.nilai2<150,"Low").otherwise("High").alias("level2")

df2.select(F.col("*"),expr1,expr2).show()

(gb 5)

Kita juga bisa memilih kolom mana saja yang akan kita sertakan dalam DataFrame yang baru

df2.select(F.col("nama"),F.col("jurusan"),expr1,expr2).show()

(gb 6)

Notebook untuk tutorial ini bisa diunduh di sini

Artikel sebelumnya :

Sebuah program edukasi yang disusun oleh Solusi247 untuk membangun talenta data Indonesia

Contact Us

Segitiga Emas Business Park
Jl. Prof. Dr. Satrio KAV 6, Setia Budi
Jakarta Selatan
P: +62 21 579 511 32
M: info@datalearns247.com