
Fungsi withColumn di PySpark digunakan untuk menambah atau mengubah kolom sebuah DataFrame. Fungsi ini termasuk fungsi transformasi DataFrame. Artinya ia mengembalikan DataFrame baru dengan menerapkan operasi yang sesuai, tanpa mengubah DataFrame aslinya.
Fungsi withColumn digunakan ketika kita perlu melakukan operasi berbasis kolom. Misalnya : mengganti nama kolom, mengubah tipe data, mengubah nilai, atau menambah kolom baru berdasar kolom yang sudah ada.
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 - withColumn :
spark = SparkSession.builder.appName('Belajar PySpark - withColumn').getOrCreate()
Buat DataFrame dari sebuah python list
data = [['Agus','Fisika',100],['Windy','Fisika',200],
['Budi','Biologi',200],['Dina','Fisika',150],
['Bayu','Fisika',50],['Dedi','Biologi',50]]
kolom = ['nama','jurusan','nilai']
df = spark.createDataFrame(data,kolom)
df.show()
Update nilai sebuah kolom DataFrame
Untuk mengubah/update nilai sebuah kolom, kirim nama kolom yang akan diupdate sebagai parameter pertama
df.withColumn('nilai', col('nilai') + 100)
Perlu diingat bahwa operasi transformasi tidak mengubah DataFrame asli. Untuk dapat menangkap perubahan yang dilakukan, hasil transformasi tersebut harus disimpan ke dalam sebuah variabel.
df_updated = df.withColumn('nilai', col('nilai') + 100)
df_updated.show()
Update nilai kolom DataFrame dengan sebuah nilai konstan
Untuk mengubah nilai sebuah kolom ke dalam sebuah nilai tertentu, kita tidak dapat melakukan assignment begitu saja. Nilai tersebut perlu kita ‘bungkus’ dengan fungsi pyspark.sql.function.lit(), untuk menghasilkan sebuah objek literal.
df.withColumn('nilai', F.lit(100)).show()
Update nilai beberapa kolom sekaligus dengan withColumns()
Pyspark menyediakan fungsi DataFrame.withColumns() untuk mengubah nilai beberapa kolom sekaligus. Fungsi ini menerima parameter bertipe python dictionary. Python dictionary adalah objek python yang menyimpan data berupa pasangan-pasangan key:value.
Dictionary yang menjadi parameter fungsi withColumns() adalah pasangan nama kolom yang akan diupdate dan nilai barunya :
{namakolom1:nilaibaru1, namakolom2:nilaibaru2, …dan seterusnya}
df.withColumns(
{'nilai': F.col('nilai')+100, 'jurusan': F.lit('Umum')}
).show()
Menambah kolom baru pada DataFrame
Cara menambahkan kolom baru mirip dengan update nilai kolom. Bedanya adalah parameter pertama diisi dengan nama kolom yang baru.
df.withColumn('nilai_baru', F.col('nilai') + 100).show()
Menambah beberapa kolom baru sekaligus
Untuk menambahkan beberapa kolom sekaligus, kita gunakan fungsi withColumns()
df.withColumns(
{'nilai_baru': F.col('nilai')+100,
'jurusan_baru': F.lit('Umum')}
).show()
Update nama kolom : withColumn dan withColumnRenamed
Untuk mengubah nama kolom sebuah DataFrame, kita bisa menggunakan fungsi withColumn(). Caranya :
- membuat kolom baru dengan nama baru,
- lalu menghapus kolom dengan nama lama, menggunakan fungsi DataFrame.drop(namakolom)
df1 = df.withColumn('nilai_total', F.col('nilai'))
df1 = df1.drop('nilai')
df1.show()
Atau dapat menggunakan fungsi withColumnRenamed()
df.withColumnRenamed('nilai', 'nilai_total').show()
Update nama beberapa kolom sekaligus
Untuk mengubah nama beberapa kolom sekaligus, kita bisa melakukan dengan beberapa langkah :
- membuat beberapa kolom dengan nama baru menggunakan fungsi withColumns(),
- kemudian menghapus kolom-kolom dengan nama lama satu persatu.
df1 = df.withColumns(
{'nilai_total':F.col('nilai'), 'asal_jurusan':F.col('jurusan')})
df1 = df1.drop('nilai').drop('jurusan')
df1.show()
Atau dapat menggunakan fungsi withColumnsRenamed(). Fungsi ini menerima parameter berupa pasangan nama_lama : nama_baru .
df.withColumnsRenamed(
{'nilai':'nilai_total','jurusan':'asal_jurusan'}
).show()
Notebook untuk artikel ini dapat diakses di sini.
Artikel sebelumnya :