pandas xử lý dữ liệu trong RAM của một máy và chạy từng lệnh ngay (eager). PySpark chia dữ liệu thành partition, xử lý song song trên nhiều executor và chạy lazy, tới khi gặp action mới thực thi.
| pandas | PySpark | |
|---|---|---|
| Quy mô | Vừa RAM một máy | Hàng trăm GB tới TB |
| Thực thi | Eager, lệnh nào chạy ngay lệnh đó | Lazy, tối ưu cả plan rồi mới chạy |
| Khởi động | Tức thì | Vài giây tới vài phút để có cluster |
| Hợp với | File nhỏ, script, phân tích nhanh, test | Job batch lớn, join bảng lớn, lakehouse |
Quy tắc thực tế: dữ liệu vừa RAM thì pandas (hoặc Polars, DuckDB) nhanh và rẻ hơn, vì Spark mất chi phí điều phối cluster và shuffle. Khi dữ liệu vượt RAM, cần join nhiều bảng lớn, hoặc pipeline đã chạy trên Databricks/EMR thì dùng PySpark.
Hai bên chuyển qua lại được: spark_df.toPandas() kéo toàn bộ dữ liệu về driver, còn pandas API on Spark (pyspark.pandas) cho viết cú pháp pandas nhưng chạy phân tán.
Lưu ý: gọi toPandas() trên DataFrame lớn là lỗi thường gặp: toàn bộ dữ liệu dồn về driver và driver hết bộ nhớ. Lọc và gộp nhóm trong Spark trước, chỉ đưa kết quả nhỏ về pandas.