Explain the difference between a broadcast join and a shuffle hash join in Spark and when you would use each at Barclays.