Day 2 – Spark SQL & DataFrames
Courseware Student Guide
Durasi: 1 hari (6–7 jam termasuk praktik)
Tujuan: Memahami Spark SQL, DataFrames, Catalyst Optimizer, serta mampu
membangun pipeline analitik dengan SQL maupun DataFrame API.
Learning Objectives
• Memahami Spark SQL & Catalyst Optimizer
• Menggunakan DataFrame API untuk transformasi data
• Memuat data dari CSV, JSON, Parquet
• Mendesain schema eksplisit dengan StructType
• Menjalankan SQL queries di atas DataFrames
• Membandingkan RDD vs DataFrame untuk kasus nyata
Spark SQL & Catalyst Optimizer
Spark SQL adalah modul Spark untuk data terstruktur yang menyediakan API DataFrame,
Dataset, serta dukungan SQL standar. Catalyst Optimizer melakukan 4 tahap: unresolved
logical plan, resolved logical plan, optimized logical plan, dan physical plan. Optimasi
mencakup constant folding, predicate pushdown, projection pruning, dan join reordering.
Tungsten execution meningkatkan performa dengan manajemen memori off-heap dan
whole-stage code generation.
DataFrames API vs RDDs
RDD (Resilient Distributed Dataset) adalah API low-level berbasis fungsi. Tidak
mengetahui schema sehingga overhead lebih besar.
DataFrame adalah API deklaratif dengan schema, dioptimasi oleh Catalyst, lebih ringkas
dan cepat.
Praktik baik: gunakan DataFrame/SQL sebagai default untuk ETL/analitik, gunakan RDD
hanya untuk transformasi custom non-relasional.
Loading Data: CSV, JSON, Parquet
Spark dapat membaca banyak format data melalui [Link].
CSV: gunakan option header, inferSchema, schema.
JSON: dukung nested fields dan multiLine.
Parquet: format kolumnar default, sangat efisien dengan predicate pushdown dan
kompresi.
Partition discovery memungkinkan filter otomatis berdasarkan folder partisi.
Schemas & DataFrame Operations
Gunakan StructType dan StructField untuk definisi schema eksplisit.
Operasi umum DataFrame: select, withColumn, filter, groupBy, agg, orderBy.
Join: inner, left, right, full, semi, anti.
Register Temp View dengan createOrReplaceTempView untuk query SQL.
Hindari UDF bila built-in function tersedia.
Hands-on Labs
Lab 1: Word Count with DataFrames – Load teks, split, explode, groupBy, count, urutkan
hasil.
Lab 2: Friends by Age – Hitung rata-rata jumlah teman per usia dengan groupBy + avg.
Lab 3: Customer Total Spending (RDD vs DataFrame) – Bandingkan reduceByKey di
RDD vs groupBy + sum di DF.
Lab 4: SQL Queries on DataFrames – Join customers & orders, gunakan window function
untuk top spender per kota.
Lab 5: Minimum Temperature (Custom Schema) – Load file CSV tanpa header, definisi
schema, filter TMIN, konversi suhu, groupBy + min.
Best Practices & Troubleshooting
• Gunakan Parquet untuk penyimpanan data
• Definisikan schema manual, jangan inferSchema di produksi
• Pakai built-in functions untuk performa optimal
• Gunakan explain() untuk melihat query plan
• Validasi hasil dengan sample data & statistik ringkas
Summary
DataFrame/SQL adalah default Spark untuk pipeline ETL. Catalyst Optimizer dan
Tungsten membuat performa lebih tinggi dibanding RDD. RDD tetap berguna untuk kasus
transformasi custom.
Setelah sesi ini, peserta mampu membuat pipeline analitik dengan DataFrame & SQL,
serta membandingkan pendekatan dengan RDD.