Your question is Repartition vs Coalesce and Caching. Take a moment with it on the right.
Talk me through your thinking if you like. When you're confident, submit your answer and I'll grade it like a real screen (7/10 or better passes).
What is the difference between repartition and coalesce in PySpark, and when is it appropriate to use cache() or persist() for Plangrid ETL jobs?