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.
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 :
Berikut adalah package yang akan kita gunakan dalam artikel ini:
from pyspark.sql import SparkSession
from pyspark.sql import functions as FSelanjutnya 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:
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)
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)
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 :