Kursus
PySpark sangat berguna saat bekerja dengan dataset berukuran besar karena menyediakan metode yang efisien untuk membersihkan dataset. Pada artikel ini, kita akan berfokus pada tugas pembersihan yang umum: cara menghapus kolom dari sebuah DataFrame menggunakan metode PySpark .drop() dan .select().
Untuk mempelajari lebih lanjut tentang PySpark, lihat kursus Introduction to PySpark ini.
Mengapa Menghapus Kolom di DataFrame PySpark?
Menghapus kolom adalah tugas umum dalam prapemrosesan data karena berbagai alasan. Menghapus kolom yang tidak perlu atau tidak relevan dapat secara signifikan mengurangi jumlah data yang perlu kita proses. Ini merampingkan dataset, membuatnya lebih mudah dianalisis dan berpotensi meningkatkan kinerja job PySpark kita.
Selain itu, saat menyiapkan data untuk model pembelajaran mesin, pemilihan fitur sering kali melibatkan penghapusan kolom yang tidak berkontribusi pada akurasi model atau justru menambah noise. Langkah ini dapat menghasilkan model yang lebih efisien dan efektif.
Terakhir, menghapus kolom bisa menjadi strategi untuk meningkatkan kualitas data. Jika sebuah kolom berisi persentase nilai hilang yang tinggi atau data yang keliru, menghapusnya mungkin merupakan langkah terbaik.
Cara Menghapus Satu Kolom dari DataFrame PySpark
Misalkan kita memiliki DataFrame df dengan lima kolom: player_name, player_position, team, minutes_played, dan score. Kolom minutes_played memiliki banyak nilai hilang, sehingga kita ingin menghapusnya.
Di PySpark, kita dapat menghapus satu kolom dari sebuah DataFrame menggunakan metode .drop().
Sintaksnya adalah df.drop("column_name") di mana:
dfadalah DataFrame tempat kita ingin menghapus kolomcolumn_nameadalah nama kolom yang akan dihapus.
Metode df.drop() mengembalikan DataFrame baru dengan kolom yang ditentukan telah dihapus.
Berikut cara menghapus sebuah kolom:
df_dropped = df.drop("minutes_played")
Cara Menghapus Beberapa Kolom dari DataFrame PySpark
Bayangkan kita ingin menganalisis DataFrame df tetapi tidak ingin mempertimbangkan tim atau posisi pemain—jadi kita ingin menghapus kedua kolom tersebut. Ada lebih dari satu cara untuk melakukannya, jadi mari kita lihat opsi yang ada.
Untuk menghapus beberapa kolom dari sebuah DataFrame PySpark, kita dapat meneruskan daftar nama kolom ke metode .drop(). Kita bisa melakukannya dengan dua cara:
# Opsi 1: Meneruskan nama sebagai sebuah daftar
df_dropped = df.drop(["team", "player_position"])
# Opsi 2: Meneruskan nama sebagai argumen terpisah
df_dropped = df.drop("team", "player_position")
Sebagai alternatif, kita dapat merangkai beberapa pemanggilan .drop(). Meskipun secara teknis berfungsi, ini umumnya tidak dianggap paling efisien atau elegan. Setiap pemanggilan membuat DataFrame baru, yang dapat menimbulkan overhead, terutama saat bekerja dengan dataset yang lebih besar.
df_dropped = df.drop("team").drop("player_position")
Menghapus Kolom Secara Kondisional
Alih-alih menentukan kolom mana yang akan dihapus, kita bisa membalik metodenya dan hanya memilih kolom yang memenuhi kondisi atau persyaratan tertentu. Dengan begitu, DataFrame yang dikembalikan tidak akan lagi berisi kolom yang tidak diinginkan.
Menggunakan .select()
Kita dapat menggunakan metode .select() di PySpark bersama list comprehension untuk menghapus satu atau lebih kolom berdasarkan kriteria tertentu. Metode ini fleksibel, dan dapat digunakan dari kondisi sederhana hingga yang kompleks.
Metode ini mengikuti sintaks df.select([col for col in df.columns if condition]), di mana:
dfadalah DataFrame yang Anda gunakan.conditionadalah kriteria yang digunakan untuk menyaring kolom yang ingin Anda pertahankan.
Mari kita kembali bekerja dengan DataFrame df dan pilih semua kolom kecuali kolom team:
df_sel = df.select([col for col in df.columns if col != "team"])
Kondisi kompleks dengan .selectExpr()
Jika kita terbiasa dengan SQL dan perlu menerapkan kondisi yang lebih kompleks saat memfilter kolom, metode .selectExpr() di PySpark menawarkan solusi yang kuat. Metode ini memungkinkan kita menggunakan ekspresi mirip SQL untuk memilih dan memanipulasi kolom langsung di dalam kode PySpark.
Sebagai contoh, perhatikan contoh berikut:
# Pilih kolom tertentu dan buat kolom baru 'FullMatch'
df_sel = df.selectExpr("player_name", "player_position", "minutes_played >= 60 as FullMatch")
Di sini, kita tidak hanya mengecualikan sebuah kolom. Kita:
- Memilih kolom
player_namedanplayer_position. - Membuat kolom baru bernama
FullMatchyang menunjukkan apakah seorang pemain bermain penuh (60 menit atau lebih).
Fleksibilitas ini membuat .selectExpr() sangat berharga untuk skenario di mana list comprehension sederhana mungkin tidak memadai.
Praktik Terbaik
Saat memutuskan untuk menghapus kolom dari DataFrame, penting untuk mengikuti beberapa praktik terbaik guna menjaga integritas data, keterbacaan kode, dan efisiensi.
1. Cadangkan data Anda: Sebelum melakukan modifikasi apa pun pada DataFrame, terutama saat menghapus kolom, sebaiknya buat salinan cadangan. Ini memastikan Anda dapat kembali ke data asli jika diperlukan.
df_backup = df.persist() # Cache DataFrame untuk menghindari komputasi ulang di kemudian hari
2. Hapus dengan inplace=False (bawaan): Secara bawaan, metode .drop() mengembalikan DataFrame baru tanpa mengubah yang asli. Ini umumnya lebih aman. Jika Anda benar-benar yakin ingin mengubah DataFrame asli, Anda dapat menggunakan inplace=True, tetapi berhati-hatilah.
df_dropped = df.drop("column_to_drop", inplace=False) # Perilaku bawaan
3. Dokumentasikan keputusan Anda: Jika Anda bekerja dalam proyek kolaboratif atau berencana meninjau kembali kode di masa depan, ada baiknya menambahkan komentar yang menjelaskan alasan menghapus kolom tertentu. Dokumentasi ini dapat memberikan konteks berharga bagi Anda dan orang lain.
4. Pertimbangkan untuk mengganti nama kolom: Alih-alih menghapus kolom, pertimbangkan apakah mengganti namanya mungkin lebih tepat, terutama jika informasi di dalamnya bisa berguna untuk analisis di masa mendatang. PySpark menyediakan metode .withColumnRenamed() yang membantu mengganti nama kolom.
Kesimpulan
Dalam tutorial ini, kita telah mempelajari cara menghapus satu dan beberapa kolom menggunakan metode .drop() dan .select(). Kita juga membahas metode alternatif untuk memanfaatkan ekspresi SQL jika diperlukan teknik seleksi yang lebih kompleks.
Jika Anda ingin mengembangkan keterampilan dan memanfaatkan teknik kuat PySpark, pertimbangkan untuk melihat kursus dan materi berikut:
FAQ
Bagaimana cara menghapus kolom berdasarkan regex di PySpark?
Untuk menghapus kolom berdasarkan pola regex di PySpark, Anda dapat memfilter nama kolom menggunakan list comprehension dan modul re (untuk regular expression), lalu meneruskan daftar yang telah difilter ke metode .drop().
Bagaimana cara menghapus kolom dengan nama yang sama di PySpark?
PySpark tidak mengizinkan nama kolom duplikat dalam sebuah DataFrame. Jika sumber data Anda memiliki nama yang duplikat, kemungkinan Anda akan menemui error saat membuat DataFrame. Praktik terbaik adalah menyelesaikan duplikasi nama di sumbernya atau saat pembuatan DataFrame.
Bagaimana cara menghapus kolom yang hanya bernilai null di PySpark?
Untuk menghapus kolom yang hanya berisi nilai null di PySpark, kita dapat terlebih dahulu menghitung jumlah null di setiap kolom menggunakan count(when(col(c).isNull(), c)). Lalu, identifikasi kolom yang jumlah null-nya sama dengan total jumlah baris DataFrame. Terakhir, hapus kolom-kolom ini menggunakan metode .drop().
Bagaimana cara menghapus kolom secara kondisional di PySpark?
Gunakan df.select([col for col in df.columns if condition]).

