title: Spark and profiling or execution plan
body: <p>Is there any tool in spak that help to understand how the code is interpreted and executed. Like a profiling tool or the details of an execution plan to help optimize the code.</p>
  
  <p>For instance, I have seen that it is better to partition two dataframes on the join key before joining them to avoid extra shuffle. How we can figure out that?</p>