Filter on date still scans the whole lake
Symptoms
- Table not partitioned by date
- Or filter wrapped in a UDF
Interactive Spark interview questions on Catalyst optimizer. Same topic as /learn/spark/catalyst. Catalyst rewrites your query four times. Exchange in the physical plan is the shuffle you will pay for.
Question 1 of 3
What is Catalyst?
Answer it out loud, then reveal. Play steps through like the simulators.
Case 1 of 1 · symptoms
Symptoms
Indexed as FAQ. Open any item if you prefer a list to Play.
What is Catalyst?
Catalyst optimizer · tap to open the answer
Short: Spark SQL's optimizer: analysis → logical optimization → physical planning.
Detailed: It resolves names, pushes filters, reorders joins, then picks physical operators (broadcast vs SMJ). DataFrame/SQL get Catalyst; raw RDDs do not.
Common mistake: Catalyst as a storage format.
Follow-up: At which phase do unresolved attributes fail?
How do you read explain('formatted') in an interview?
Catalyst optimizer · tap to open the answer
Short: Bottom is the scan. Look for PushedFilters, PartitionFilters, Exchange, and the join type.
Detailed: If the filter isn't in PushedFilters, you're scanning extra files. Exchange means shuffle. BroadcastHashJoin vs SortMergeJoin is the money line.
Common mistake: Pasting explain() without pointing at an operator.
Follow-up: What does AdaptiveSparkPlan mean?
Catalyst picked SMJ. Stats were wrong. What's your move?
Catalyst optimizer · tap to open the answer
Short: ANALYZE TABLE / fix stats, add a broadcast hint if you know the size, or enable AQE join conversion.
Detailed: Don't hint forever as a substitute for stats. Hints rot. Measure with actual size after filters — AQE sees runtime sizes.
Senior: When you've measured the build side after filters and documented why stats cannot see it (UDF, JDBC, etc.).
Common mistake: Broadcast hint on a table that will grow 20×.
Follow-up: When is a hint the right senior answer?