PySpark Baca CSV: Memuat dan Memproses Berkas Besar Secara Efisien
Pelajari cara membaca berkas CSV secara efisien di PySpark. Jelajahi opsi, penanganan skema, kompresi, partisi, dan praktik terbaik untuk sukses di big data.
Berkas CSV adalah pilar penting dalam pemrosesan dan analitik data. Hampir setiap profesional data, dari insinyur data tingkat menengah dan data scientist hingga pengembang yang memanfaatkan PySpark, pada akhirnya akan berurusan dengan berkas CSV. Namun, ketika dataset berkembang dari megabyte menjadi gigabyte, bahkan terabyte dan seterusnya, alat tunggal yang sederhana seperti Pandas atau pustaka standar Python akan kesulitan menangani bebannya. Di sinilah Apache Spark dan PySpark menjadi penting untuk mengelola berkas CSV berskala besar dalam lingkungan komputasi terdistribusi.
Artikel ini akan mengajarkan semua yang perlu Anda ketahui saat membaca berkas CSV besar dengan PySpark.
PySpark memungkinkan pengguna membaca berkas CSV ke dalam DataFrame terdistribusi. DataFrame di PySpark sangat mirip dengan Pandas DataFrame, sehingga antarmukanya terasa familier. Namun di balik layar, PySpark DataFrame mendistribusikan komputasi dan penyimpanan ke beberapa node, memberikan kinerja luar biasa untuk dataset yang sangat besar.
PySpark menawarkan keunggulan menarik untuk berkas CSV besar, seperti:
Pemuatan data terdistribusi,
Penanganan nilai null yang tangguh,
Fleksibilitas dalam mendefinisikan skema, dan
Cara yang mudah untuk mengelola banyak berkas CSV atau yang terkompresi.
Namun demikian, tantangan umum muncul, termasuk menangani header secara efisien, menginferensi atau menetapkan skema secara akurat, serta mengelola rekaman yang rusak atau tidak konsisten. Teruskan membaca untuk mengetahui cara mengatasi semua tantangan ini.
Membaca berkas CSV di PySpark adalah salah satu topik yang harus Anda pahami untuk unggul dalam wawancara PySpark. 36 Pertanyaan dan Jawaban Wawancara PySpark Teratas untuk 2025 kami menyediakan panduan komprehensif, mencakup topik mulai dari konsep dasar hingga teknik lanjutan dan strategi optimasi.
Dasar-dasar Membaca Berkas CSV di PySpark
Membaca data CSV sering kali menjadi salah satu langkah awal dan paling krusial dalam alur kerja PySpark, menjadi fondasi untuk transformasi selanjutnya, analisis eksploratori, dan tugas machine learning. Melakukan langkah ini dengan benar memastikan pemrosesan data lebih bersih dan kinerja hilir yang lebih baik.
Kerangka konseptual
PySpark membaca berkas CSV dalam model terdistribusi Spark. Alih-alih membaca data CSV seluruhnya ke dalam memori pada satu mesin, Spark membagi tugas data besar di beberapa node klaster. Optimizer bawaan Spark, Catalyst, semakin meningkatkan kinerja dengan mengeksekusi operasi inti yang diperlukan selama ingest CSV secara efisien.
Sintaks baca inti
Cara sederhana untuk membaca berkas CSV memanfaatkan fungsi bawaan Spark:
spark.read.csv("file_path", header=True, inferSchema=True)Didukung oleh
Atau secara eksplisit:
spark.read.format("csv").option("header","True").load("file_path")Didukung oleh
Parameter kunci meliputi:
file_path - lokasi berkas CSV.
header - menetapkan nama kolom dari header CSV jika True.
inferSchema - secara otomatis menginferensi tipe data kolom.
delimiter - karakter pemisah kolom; default adalah koma.
PySpark menyediakan banyak opsi yang memberi kendali terperinci atas proses pembacaan CSV.
Header dan inferensi skema
Mengatur header=True menginstruksikan Spark untuk menggunakan baris pertama CSV sebagai nama kolom.
inferSchema=True membuat Spark secara otomatis menebak tipe kolom dengan memindai data Anda:
spark.read.csv("customers.csv", header=True, inferSchema=True)Didukung oleh
Walaupun inferensi skema nyaman dan efektif pada awalnya, dataset besar akan mengalami penurunan kinerja karena Spark melakukan banyak kali pemindaian data untuk menentukan tipe data.
Spesifikasi skema kustom
Mendefinisikan skema secara eksplisit akan meningkatkan kinerja secara signifikan dengan menghilangkan pemindaian data berulang oleh Spark. Skema yang ditentukan mengkomunikasikan nama dan tipe kolom sejak awal.
Berikut cara mendefinisikan skema kustom di PySpark:
Selanjutnya, mari kita bahas penanganan delimiter di PySpark saat membaca berkas CSV.
Menangani delimiter dan karakter khusus
Banyak berkas CSV menggunakan delimiter selain koma, seperti pipa atau tab. PySpark memungkinkan Anda menentukan delimiter secara eksplisit:
spark.read.csv("customers.csv", header=True, delimiter="|")Didukung oleh
Selain itu, karakter escape dan quote juga dapat dikonfigurasi untuk menangani skenario karakter khusus:
spark.read.csv("data.csv", header=True, escape='\"', quote='"')Didukung oleh
Mengelola nilai null dan nilai hilang
Data CSV di dunia nyata sering kali berisi inkonsistensi atau rekaman yang tidak lengkap. PySpark memudahkan penanganan nilai null dengan menerjemahkan placeholder kustom menjadi nilai null:
spark.read.csv("customers.csv", header=True, schema=schema, nullValue="NA")Didukung oleh
Ini memperjelas nilai null, secara drastis mengurangi pembersihan data manual di kemudian hari.
Mari jelajahi strategi lain untuk menangani nilai null.
Anda dapat memutuskan untuk memfilter nilai null:
# Filter baris di mana Age tidak null
df_filtered = df.filter(df["Age"].isNotNull())
df_filtered.show()Didukung oleh
Ini memfilter DataFrame agar hanya menyertakan baris di mana kolom Age tidak null. Keluaran akan terlihat seperti:
+---+-----+---+------+| ID| Name|Age|Salary|+---+-----+---+------+|1| John|25|50000||3| Bob|30| NULL||4|Carol|28|55000|+---+-----+---+------+Didukung oleh
Strategi lainnya adalah mengisi nilai null:
# Ganti nilai null di Age dan Salary dengan nilai default
df_filled = df.na.fill({"Age":0,"Salary":0})
df_filled.show()Didukung oleh
Keluaran akan terlihat seperti ini:
+---+-----+---+------+| ID| Name|Age|Salary|+---+-----+---+------+|1| John|25|50000||2|Alice|0|60000||3| Bob|30|0||4|Carol|28|55000||5|David|0|48000|+---+-----+---+------+Didukung oleh
Membaca banyak berkas dan direktori
PySpark unggul dalam mengelola dataset besar yang terdiri dari banyak berkas. Alih-alih memuat dan menggabungkan berkas dari direktori secara manual dan berurutan, PySpark mendukung pola wildcard untuk pemuatan massal yang cepat dan efisien:
spark.read.csv("/data/sales/*.csv", header=True, schema=schema)Didukung oleh
Ini secara efektif mengagregasikan banyak berkas CSV menjadi satu DataFrame dalam satu operasi yang ringkas.
Setelah data dimuat di PySpark, langkah berikutnya mencakup wrangling, rekayasa fitur, dan membangun model machine learning. Kursus Feature Engineering dengan PySpark kami membahas konsep-konsep ini secara mendalam.
Teknik Optimasi untuk Pembacaan CSV yang Efisien
Saat menangani data CSV berskala besar, memanfaatkan strategi optimasi PySpark sangatlah krusial.
Strategi partisi
Partisi sangat memengaruhi kinerja dengan mendistribusikan data secara merata di seluruh node klaster. Spark memungkinkan kontrol eksplisit atas ukuran dan jumlah partisi selama ingest data untuk membantu mempercepat operasi selanjutnya:
df = spark.read.csv("data.csv", header=True, schema=schema).repartition(20)Didukung oleh
.repartition(20) membagi DataFrame menjadi 20 partisi di seluruh klaster Spark Anda. Karena Spark memproses data dalam potongan, memiliki lebih banyak partisi dapat:
Meningkatkan paralelisme
Menyeimbangkan beban kerja di seluruh klaster
Mempercepat transformasi dan penulisan
Jika Anda menjalankan pada klaster dengan banyak core, ini membantu memaksimalkan pemanfaatannya. Namun, Anda dapat memperlambat proses jika berlebihan (misalnya, 1000 partisi pada dataset kecil).
Temukan lebih banyak fungsi Spark seperti repartitionmelalui PySpark Cheat Sheet: Spark in Python. Lembar contekan ini membahas detail tentang inisialisasi Spark di Python, pemuatan data, penyortiran, dan repartisi.
Caching dan persistensi
Jika alur kerja Anda berulang kali mengakses dataset yang sama setelah ingest, melakukan caching DataFrame di memori atau di disk dapat meningkatkan kinerja secara signifikan:
Namun, ingat bahwa caching memerlukan sumber daya sistem yang memadai; selalu seimbangkan penggunaan memori dengan manfaat kinerja.
Evaluasi malas dan pemicu aksi
PySpark mengandalkan model evaluasi malas (lazy): operasi dataframe mengubah rencana alih-alih langsung mengeksekusi. Pembacaan berkas yang sebenarnya hanya dijalankan saat diperlukan, dipicu oleh perintah seperti show(), count(), atau collect():
# belum membaca
df = spark.read.csv("data.csv", header=True, schema=schema)# pembacaan sebenarnya dipicu di sini
df.show(5)Didukung oleh
Kasus Penggunaan Lanjutan dan Pertimbangan
Mari kita telusuri skenario yang lebih kompleks yang mungkin Anda temui saat membaca berkas CSV:
Membaca berkas CSV terkompresi
Spark secara efisien mengelola berkas CSV terkompresi seperti gz atau .bz2 secara transparan tanpa konfigurasi tambahan:
spark.read.csv("logs.csv.gz", header=True, schema=schema)Didukung oleh
Menangani rekaman yang rusak
Dataset CSV dapat berisi baris yang rusak. PySpark memberikan beberapa opsi untuk membantu Anda mengelola kesalahan atau rekaman yang rusak dengan lancar:
mode="PERMISSIVE" (default): menyertakan baris yang rusak dengan kolom yang diisi null.
mode="DROPMALFORMED: melewati rekaman yang rusak secara senyap. Mode ini tidak didukung dalam fungsi bawaan CSV.
mode="FAILFAST": melempar pengecualian saat menemukan rekaman yang rusak.
spark.read.csv("data.csv", header=True, schema=schema, mode="FAILFAST")Didukung oleh
Pengaturan lokal dan enkoding
Terkadang, data CSV menggunakan enkoding non-standar. PySpark dengan mudah menangani berbagai enkoding melalui parameter encoding:
spark.read.csv("data_utf8.csv", header=True, encoding="UTF-8")Didukung oleh
Enkoding yang didukung mencakup US-ASCII, ISO-8859-1, UTF-8, UTF-16BE, UTF-16LE, dan UTF-16.
Praktik terbaik dan jebakan umum
Berikut beberapa praktik terbaik yang perlu diingat saat membaca berkas CSV dengan Spark:
Tentukan skema secara eksplisit jika struktur dataset diketahui.
Kendalikan partisi untuk mendistribusikan beban kerja secara efisien.
Lakukan cache secara strategis untuk DataFrame yang sering diakses.
Picu aksi pembacaan secara sengaja, dengan mengingat evaluasi malas.
Pastikan untuk menghindari:
Mengatur header=False untuk CSV dengan baris header.
Hanya mengandalkan inferSchema pada dataset besar atau yang sering diakses.
Mengabaikan pengaturan delimiter atau enkoding yang krusial.
Kesimpulan
Memahami dan memanfaatkan kemampuan ingest CSV PySpark yang kuat sangat penting untuk pemrosesan big data yang efektif. Dengan spesifikasi skema yang jelas, penanganan format null kustom, penggunaan partisi yang efisien, dan pengelolaan skenario berkas terkompresi atau multi-berkas, alur kerja Anda menjadi lebih ringkas dan berkinerja tinggi.
Ingat bahwa meskipun PySpark menawarkan banyak keunggulan untuk tugas data berskala besar, alat yang lebih sederhana seperti Pandas mungkin masih memadai untuk dataset kecil. Gunakan PySpark saat bekerja dengan data yang melampaui kemampuan satu mesin, dan selalu pertimbangkan keunggulan komputasi terdistribusinya.
Untuk mengeksplorasi PySpark lebih jauh, lihat kursus Spark mendalam kami, termasuk:
Apa cara terbaik membaca berkas CSV besar di PySpark?⌄
Praktik terbaik adalah menentukan skema kustom menggunakan StructType alih-alih mengandalkan inferSchema. Metode ini meningkatkan kinerja dengan menghindari pemindaian data berulang.
Apakah PySpark dapat menangani berkas CSV dengan delimiter berbeda?⌄
Ya. Anda dapat menetapkan delimiter kustom menggunakan opsi delimiter dalam spark.read.csv(). Misalnya, gunakan delimiter="|" untuk nilai yang dipisahkan pipa.
Bagaimana cara membaca banyak berkas CSV sekaligus dalam sebuah direktori?⌄
Anda dapat menggunakan path wildcard, seperti spark.read.csv("/data/*.csv", ...), untuk memuat beberapa berkas sekaligus ke dalam satu DataFrame.
Apa yang dilakukan `mode="DROPMALFORMED"` saat membaca CSV?⌄
Ini memberi tahu Spark untuk melewati dan mengabaikan rekaman yang rusak dalam berkas CSV alih-alih menyertakannya atau menyebabkan kegagalan.
Apakah PySpark dapat membaca berkas CSV terkompresi seperti `.gz` atau `.bz2`?⌄
Ya. PySpark secara otomatis mendekompresi dan membaca berkas CSV terkompresi tanpa memerlukan konfigurasi tambahan ketika Anda memberikan path berkas yang benar.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Berkas CSV adalah pilar penting dalam pemrosesan dan analitik data. Hampir setiap profesional data, dari insinyur data tingkat menengah dan data scientist hingga pengembang yang memanfaatkan PySpark, pada akhirnya akan berurusan dengan berkas CSV. Namun, ketika dataset berkembang dari megabyte menjadi gigabyte, bahkan terabyte dan seterusnya, alat tunggal yang sederhana seperti Pandas atau pustaka standar Python akan kesulitan menangani bebannya. Di sinilah Apache Spark dan PySpark menjadi penting untuk mengelola berkas CSV berskala besar dalam lingkungan komputasi terdistribusi.
Artikel ini akan mengajarkan semua yang perlu Anda ketahui saat membaca berkas CSV besar dengan PySpark.
Pastikan Anda telah memasang PySpark dan memahami dasar-dasarnya dengan mengikuti tutorial Memulai dengan PySpark kami.
Apa itu Membaca CSV di PySpark?
PySpark memungkinkan pengguna membaca berkas CSV ke dalam DataFrame terdistribusi. DataFrame di PySpark sangat mirip dengan Pandas DataFrame, sehingga antarmukanya terasa familier. Namun di balik layar, PySpark DataFrame mendistribusikan komputasi dan penyimpanan ke beberapa node, memberikan kinerja luar biasa untuk dataset yang sangat besar.
PySpark menawarkan keunggulan menarik untuk berkas CSV besar, seperti:
Namun demikian, tantangan umum muncul, termasuk menangani header secara efisien, menginferensi atau menetapkan skema secara akurat, serta mengelola rekaman yang rusak atau tidak konsisten. Teruskan membaca untuk mengetahui cara mengatasi semua tantangan ini.
Membaca berkas CSV di PySpark adalah salah satu topik yang harus Anda pahami untuk unggul dalam wawancara PySpark. 36 Pertanyaan dan Jawaban Wawancara PySpark Teratas untuk 2025 kami menyediakan panduan komprehensif, mencakup topik mulai dari konsep dasar hingga teknik lanjutan dan strategi optimasi.
Dasar-dasar Membaca Berkas CSV di PySpark
Membaca data CSV sering kali menjadi salah satu langkah awal dan paling krusial dalam alur kerja PySpark, menjadi fondasi untuk transformasi selanjutnya, analisis eksploratori, dan tugas machine learning. Melakukan langkah ini dengan benar memastikan pemrosesan data lebih bersih dan kinerja hilir yang lebih baik.
Kerangka konseptual
PySpark membaca berkas CSV dalam model terdistribusi Spark. Alih-alih membaca data CSV seluruhnya ke dalam memori pada satu mesin, Spark membagi tugas data besar di beberapa node klaster. Optimizer bawaan Spark, Catalyst, semakin meningkatkan kinerja dengan mengeksekusi operasi inti yang diperlukan selama ingest CSV secara efisien.
Sintaks baca inti
Cara sederhana untuk membaca berkas CSV memanfaatkan fungsi bawaan Spark:
Atau secara eksplisit:
Parameter kunci meliputi:
file_path- lokasi berkas CSV.header- menetapkan nama kolom dari header CSV jikaTrue.inferSchema- secara otomatis menginferensi tipe data kolom.delimiter- karakter pemisah kolom; default adalah koma.Tutorial Belajar PySpark dari Nol pada 2025 kami membahas lebih detail tentang dasar-dasar PySpark dan cara mempelajarinya.
Membaca Berkas CSV: Opsi dan Konfigurasi
PySpark menyediakan banyak opsi yang memberi kendali terperinci atas proses pembacaan CSV.
Header dan inferensi skema
Mengatur
header=Truemenginstruksikan Spark untuk menggunakan baris pertama CSV sebagai nama kolom.inferSchema=Truemembuat Spark secara otomatis menebak tipe kolom dengan memindai data Anda:Walaupun inferensi skema nyaman dan efektif pada awalnya, dataset besar akan mengalami penurunan kinerja karena Spark melakukan banyak kali pemindaian data untuk menentukan tipe data.
Spesifikasi skema kustom
Mendefinisikan skema secara eksplisit akan meningkatkan kinerja secara signifikan dengan menghilangkan pemindaian data berulang oleh Spark. Skema yang ditentukan mengkomunikasikan nama dan tipe kolom sejak awal.
Berikut cara mendefinisikan skema kustom di PySpark:
Selanjutnya, mari kita bahas penanganan delimiter di PySpark saat membaca berkas CSV.
Menangani delimiter dan karakter khusus
Banyak berkas CSV menggunakan delimiter selain koma, seperti pipa atau tab. PySpark memungkinkan Anda menentukan delimiter secara eksplisit:
Selain itu, karakter escape dan quote juga dapat dikonfigurasi untuk menangani skenario karakter khusus:
Mengelola nilai null dan nilai hilang
Data CSV di dunia nyata sering kali berisi inkonsistensi atau rekaman yang tidak lengkap. PySpark memudahkan penanganan nilai null dengan menerjemahkan placeholder kustom menjadi nilai null:
Ini memperjelas nilai null, secara drastis mengurangi pembersihan data manual di kemudian hari.
Mari jelajahi strategi lain untuk menangani nilai null.
Anda dapat memutuskan untuk memfilter nilai null:
Ini memfilter DataFrame agar hanya menyertakan baris di mana kolom
Agetidak null. Keluaran akan terlihat seperti:Strategi lainnya adalah mengisi nilai null:
Keluaran akan terlihat seperti ini:
Membaca banyak berkas dan direktori
PySpark unggul dalam mengelola dataset besar yang terdiri dari banyak berkas. Alih-alih memuat dan menggabungkan berkas dari direktori secara manual dan berurutan, PySpark mendukung pola wildcard untuk pemuatan massal yang cepat dan efisien:
Ini secara efektif mengagregasikan banyak berkas CSV menjadi satu DataFrame dalam satu operasi yang ringkas.
Setelah data dimuat di PySpark, langkah berikutnya mencakup wrangling, rekayasa fitur, dan membangun model machine learning. Kursus Feature Engineering dengan PySpark kami membahas konsep-konsep ini secara mendalam.
Teknik Optimasi untuk Pembacaan CSV yang Efisien
Saat menangani data CSV berskala besar, memanfaatkan strategi optimasi PySpark sangatlah krusial.
Strategi partisi
Partisi sangat memengaruhi kinerja dengan mendistribusikan data secara merata di seluruh node klaster. Spark memungkinkan kontrol eksplisit atas ukuran dan jumlah partisi selama ingest data untuk membantu mempercepat operasi selanjutnya:
.repartition(20)membagi DataFrame menjadi 20 partisi di seluruh klaster Spark Anda. Karena Spark memproses data dalam potongan, memiliki lebih banyak partisi dapat:Jika Anda menjalankan pada klaster dengan banyak core, ini membantu memaksimalkan pemanfaatannya. Namun, Anda dapat memperlambat proses jika berlebihan (misalnya, 1000 partisi pada dataset kecil).
Temukan lebih banyak fungsi Spark seperti
repartitionmelalui PySpark Cheat Sheet: Spark in Python. Lembar contekan ini membahas detail tentang inisialisasi Spark di Python, pemuatan data, penyortiran, dan repartisi.Caching dan persistensi
Jika alur kerja Anda berulang kali mengakses dataset yang sama setelah ingest, melakukan caching DataFrame di memori atau di disk dapat meningkatkan kinerja secara signifikan:
Namun, ingat bahwa caching memerlukan sumber daya sistem yang memadai; selalu seimbangkan penggunaan memori dengan manfaat kinerja.
Evaluasi malas dan pemicu aksi
PySpark mengandalkan model evaluasi malas (lazy): operasi dataframe mengubah rencana alih-alih langsung mengeksekusi. Pembacaan berkas yang sebenarnya hanya dijalankan saat diperlukan, dipicu oleh perintah seperti
show(),count(), ataucollect():Kasus Penggunaan Lanjutan dan Pertimbangan
Mari kita telusuri skenario yang lebih kompleks yang mungkin Anda temui saat membaca berkas CSV:
Membaca berkas CSV terkompresi
Spark secara efisien mengelola berkas CSV terkompresi seperti
gzatau.bz2secara transparan tanpa konfigurasi tambahan:Menangani rekaman yang rusak
Dataset CSV dapat berisi baris yang rusak. PySpark memberikan beberapa opsi untuk membantu Anda mengelola kesalahan atau rekaman yang rusak dengan lancar:
mode="PERMISSIVE"(default): menyertakan baris yang rusak dengan kolom yang diisi null.mode="DROPMALFORMED: melewati rekaman yang rusak secara senyap. Mode ini tidak didukung dalam fungsi bawaan CSV.mode="FAILFAST": melempar pengecualian saat menemukan rekaman yang rusak.Pengaturan lokal dan enkoding
Terkadang, data CSV menggunakan enkoding non-standar. PySpark dengan mudah menangani berbagai enkoding melalui parameter encoding:
Enkoding yang didukung mencakup
US-ASCII,ISO-8859-1,UTF-8,UTF-16BE,UTF-16LE, danUTF-16.Praktik terbaik dan jebakan umum
Berikut beberapa praktik terbaik yang perlu diingat saat membaca berkas CSV dengan Spark:
Pastikan untuk menghindari:
header=Falseuntuk CSV dengan baris header.inferSchemapada dataset besar atau yang sering diakses.Kesimpulan
Memahami dan memanfaatkan kemampuan ingest CSV PySpark yang kuat sangat penting untuk pemrosesan big data yang efektif. Dengan spesifikasi skema yang jelas, penanganan format null kustom, penggunaan partisi yang efisien, dan pengelolaan skenario berkas terkompresi atau multi-berkas, alur kerja Anda menjadi lebih ringkas dan berkinerja tinggi.
Ingat bahwa meskipun PySpark menawarkan banyak keunggulan untuk tugas data berskala besar, alat yang lebih sederhana seperti Pandas mungkin masih memadai untuk dataset kecil. Gunakan PySpark saat bekerja dengan data yang melampaui kemampuan satu mesin, dan selalu pertimbangkan keunggulan komputasi terdistribusinya.
Untuk mengeksplorasi PySpark lebih jauh, lihat kursus Spark mendalam kami, termasuk: