Apache Spark · PySpark

Học Apache Spark
với PySpark từ đầu

Xử lý dữ liệu lớn phân tán bằng PySpark — từ kiến trúc Driver/Executor, DataFrame, Spark SQL, ETL với Parquet, đến Structured Streaming đọc trực tiếp từ Kafka. Lộ trình 6 bài kèm lab Docker chạy tại máy.

7
Bài học
PySpark
Ngôn ngữ
Docker
Lab tại máy
Kafka
Streaming
Lộ trình 7 bài
Bài 0 · Nền tảng
Spark là gì?
Trả lời thẳng: Spark là engine hay ngôn ngữ hay database? Spark SQL nằm ở đâu và chạy nó ở chỗ nào? So sánh chi tiết DataFrame của Spark với pandas. Đọc trước khi vào Bài 1.
EngineSpark SQLvs pandas
Bài 1
PySpark cơ bản & Kiến trúc
Driver/Executor/Worker, SparkSession, đọc CSV/JSON thành DataFrame, select/filter/withColumn, và sự khác biệt lazy vs action.
SparkSessionDataFrameLazy Eval
Bài 2
Transform & Làm sạch dữ liệu
groupBy/agg, Window function, các kiểu join, xử lý null/duplicate, ép kiểu, làm sạch dữ liệu bẩn — bộ kỹ năng lõi của data engineer.
groupByWindowJoinCleaning
Bài 3
Spark SQL
createTempView, viết query SQL thuần trên DataFrame, CTE, window trong SQL — tận dụng nền tảng SQL (Oracle/MySQL) bạn đã có.
TempViewSQLCTE
Bài 4
ETL & Parquet
Pipeline ETL hoàn chỉnh: đọc → transform → ghi Parquet có partition. So sánh CSV vs Parquet, partitioning, schema, write mode.
ETLParquetPartition
Bài 5
Structured Streaming + Kafka
Đọc stream từ Kafka, parse JSON của Debezium CDC, windowing theo thời gian, watermark, checkpoint, output mode — nối thẳng vào cdc-lab.
StreamingKafkaWatermark
Bài 6
Tối ưu & Spark UI
Đọc Spark UI, hiểu shuffle & partition, cache/persist, explain() đọc query plan, repartition vs coalesce, broadcast join, AQE.
Spark UIShuffleCacheAQE
Bắt đầu
Setup
Dựng Lab bằng Docker
Spark master + worker + JupyterLab bằng Docker Compose, kèm dữ liệu mẫu. Cách chạy, các UI cần mở, và cách nối vào Kafka cho bài Streaming.
DockerJupyterLabSpark Cluster
3 ý cốt lõi phải nhớ
Lazy Evaluation
select/filter/join chỉ ghi "kế hoạch", chưa chạy gì. Tới khi gặp action (show, count, write) Spark mới thực thi & tối ưu toàn chuỗi.
Partition & Shuffle
Data chia thành partition xử lý song song. Shuffle (groupBy, join) chuyển data qua mạng — là phần tốn kém nhất, cần tối ưu.
DataFrame > RDD
Thời nay viết DataFrame/Spark SQL là chính, có Catalyst optimizer tự tối ưu. RDD chỉ dùng khi cần xử lý cực low-level.