Explain the difference between a client-side join and a broadcast join in Apache Spark, and when you should use each.