Apa itu Spark DataFrame API?

Apache Spark adalah mesin pemrosesan terdistribusi yang dirancang untuk memproses data terstruktur, semi-terstruktur, dan tidak terstruktur dalam skala besar. Untuk berinteraksi dengan mesin dan menentukan operasi data terdistribusi, developer menggunakan Spark API.


Inti dari pengembangan Spark modern adalah Spark DataFrame API. DataFrame mengatur dan memproses data terdistribusi ke dalam kolom bernama, mirip dengan tabel dalam database relasional atau spreadsheet. DataFrame menyediakan antarmuka deklaratif yang terstruktur untuk menganalisis set data besar sekaligus mengoptimalkan eksekusi fisik secara otomatis di balik layar.

Arsitektur dan eksekusi Spark API

Untuk memahami cara Spark API mengeksekusi kode Anda di seluruh jaringan terdistribusi, penting untuk memahami komponen dasar arsitektur runtime-nya:


  • Driver: Koordinator pusat aplikasi Spark. Koordinator ini membaca kode Anda, menerjemahkan operasi deklaratif menjadi rencana eksekusi logis, dan menjadwalkan tugas di seluruh node worker.
  • Pengelola cluster: Alokator resource (seperti Kubernetes atau pengelola resource mandiri) yang menyediakan resource CPU, memori, dan jaringan di seluruh cluster.
  • Eksekutor: Worker instance yang berjalan di node cluster. Mereka menerima petunjuk tugas dari driver, menjalankan operasi pemrosesan data secara lokal di memori, dan menampilkan hasil atau menulisnya ke penyimpanan.
  • DAG, tahap, dan tugas: Spark tidak menjalankan transformasi data baris demi baris. Sebagai gantinya, driver mengompilasi kode DataFrame Anda menjadi Directed Acyclic Graph (DAG) operator fisik. Driver mengelompokkan operator ini ke dalam fase eksekusi luas yang disebut tahap—yang dibagi berdasarkan batas pengacakan data—dan memecah tahap tersebut menjadi tugas-tugas individual yang didistribusikan ke eksekutor untuk eksekusi paralel.

Apa perbedaan antara Spark RDD dan DataFrame?

Saat mendesain pipeline data terdistribusi, developer memilih antara dua antarmuka pemrograman utama:


  • Spark RDD (Resilient Distributed Dataset): Spark API tingkat rendah yang asli. Spark RDD mewakili kumpulan objek JVM yang tidak dapat diubah dan fault-tolerant yang didistribusikan di seluruh cluster. Karena RDD berisi objek Java arbitrer, mesin eksekusi tidak dapat memeriksa struktur internalnya. Hal ini memaksa developer untuk menulis dan menyesuaikan logika transformasi tingkat rendah secara manual, yang sering kali mengakibatkan overhead pembersihan sampah memori yang signifikan dan serialisasi yang lambat.
  • Spark DataFrame: Standar modern untuk pemrosesan data terstruktur. DataFrame mengatur data ke dalam baris dan kolom yang ditentukan oleh skema yang ketat. Karena mesin eksekusi memahami jenis data dan struktur set data, mesin ini dapat otomatis mengoptimalkan kode sebelum mengeksekusinya.

Mengapa memilih DataFrame daripada RDD?

Untuk hampir semua kasus penggunaan data engineering dan data science, DataFrame API adalah pilihan yang lebih disukai. RDD disediakan untuk skenario saat Anda harus memanipulasi data mentah yang tidak terstruktur (seperti file biner atau streaming media) menggunakan objek Java kustom. DataFrame memerlukan lebih sedikit kode, otomatis berjalan lebih cepat, dan menggunakan pengelolaan memori biner off-heap untuk menghindari bottleneck pembersihan sampah memori JVM.

Cara tim data menggunakan Spark API

Spark DataFrame API menyederhanakan tugas-tugas yang intensif secara komputasi dalam memproses, membersihkan, dan menyiapkan data dalam jumlah besar.


  • Data engineer: Engineer menggunakan DataFrame API untuk membangun pipeline data yang tangguh dan fault-tolerant. Pipeline ini mengekstrak data mentah, menerapkan skema, menjalankan transformasi terstruktur, dan menulis tabel yang sesuai ke data lake atau cloud data warehouse. Sintaksis deklaratif memungkinkan mereka memproses data berukuran terabyte setiap hari sekaligus meminimalkan kompleksitas kode dan overhead pemeliharaan.
  • Data scientist: Data scientist menggunakan DataFrame API untuk mengeksplorasi dan menyiapkan set data besar yang melebihi batas memori satu mesin. Dengan mendistribusikan partisi data di seluruh worker node, mereka dapat menjalankan analisis data eksploratif, membersihkan nilai null, dan merekayasa fitur dalam skala besar, sehingga mempercepat waktu pemerolehan insight.

Library inti yang dibangun di DataFrame API

Spark DataFrame API berfungsi sebagai fondasi terprogram untuk library pemrosesan lanjutan Spark:


  • Spark SQL: Modul ini memungkinkan Anda menjalankan kueri ANSI SQL langsung di set data Spark. Anda dapat membuat kueri DataFrame sebagai tampilan sementara, yang menggabungkan kode Python atau Scala deklaratif dengan kueri SQL standar secara lancar.
  • Structured Streaming: Mesin ini memproses aliran data real-time yang berkelanjutan. Structured Streaming menggunakan perintah DataFrame API yang sama dengan pemrosesan batch statis, yang secara otomatis menangani micro-batching, fault tolerance, dan pengelolaan status.
  • MLlib: Library machine learning terdistribusi Spark menggunakan DataFrame untuk mengelola dan menyiapkan set data pelatihan, yang menyediakan algoritma bawaan yang skalabel untuk klasifikasi, regresi, pengelompokan, dan penyaringan kolaboratif.

Manfaat Spark DataFrame API

Pengoptimalan deklaratif

DataFrame menggunakan pengoptimal kueri bawaan yang disebut Catalyst Optimizer. Saat Anda menulis kode DataFrame, pengoptimal akan otomatis menulis ulang rencana eksekusi fisik yang menerapkan pushdown filter, pruning proyeksi, dan pengurutan ulang gabungan untuk berjalan secepat mungkin tanpa penyesuaian manual.

Fleksibilitas bahasa

Entah tim Anda menulis kode dalam Python (PySpark), Scala, Java, atau R, DataFrame API memastikan performa yang sama. Rencana eksekusi yang mendasarinya dikompilasi dan dioptimalkan dalam lapisan eksekusi yang sama dan tidak bergantung pada JVM.

Pengelolaan memori yang efisien

DataFrame menggunakan mesin eksekusi Tungsten untuk menyimpan data dalam format biner off-heap yang sangat terkompresi. Hal ini menghilangkan overhead pembuatan objek JVM dan mencegah jeda pembersihan sampah memori dari pembekuan thread eksekutor.

Cara menggunakan Spark DataFrame API di Google Cloud

Menjalankan Spark open source secara tradisional memerlukan konfigurasi cluster manual, pengelolaan versi software, dan peering jaringan yang kompleks. Google Cloud menyederhanakan hal ini dengan menawarkan Managed Service untuk Apache Spark, yang mengubah eksekusi terdistribusi menjadi platform data yang terkelola sepenuhnya dan siap digunakan perusahaan.


Tim data menjalankan workload Spark DataFrame di Google Cloud menggunakan kemampuan berikut:


  • Deployment cluster terkelola dan serverless: Google Cloud memungkinkan Anda memilih model eksekusi yang sesuai dengan kebutuhan operasional Anda. Anda dapat menjalankan kode DataFrame dalam mode serverless untuk mengirimkan tugas batch secara langsung—hanya membayar sesuai durasi runtime dalam hitungan detik yang akurat saat resource otomatis diskalakan—atau men-deploy cluster terkelola persisten yang sangat dapat disesuaikan untuk workload berkelanjutan.
  • Konektivitas BigQuery yang dioptimalkan: Konektor Spark-BigQuery mengabaikan transisi berorientasi baris JVM dengan menggunakan data BigQuery secara langsung dalam format Apache Arrow native. Data scientist juga dapat menggunakan antarmuka notebook terintegrasi untuk menjalankan kode DataFrame PySpark dan kueri SQL pada set data terkelola yang sama tanpa beralih lingkungan.
  • Eksekusi C++ native yang di-vektorisasi: Saat menjalankan workload Spark di Google Cloud, Anda dapat mengaktifkan Lightning Engine untuk batch serverless atau cluster terkelola. Mesin eksekusi kueri C++ native ini mengompilasi rencana kueri fisik langsung ke dalam petunjuk native menggunakan Velox dan Gluten. Dengan mengabaikan model iterator Volcano JVM dan bottleneck pembersihan sampah memori, mesin ini mempercepat workload DataFrame dan Spark SQL Anda hingga 4,9x tanpa perubahan kode.


Langkah selanjutnya

Mulailah membangun solusi di Google Cloud dengan kredit gratis senilai $300 dan lebih dari 20 produk yang selalu gratis.

Google Cloud