title: Scala add new column to dataframe by expression
body: <p>I am going to add new column to a dataframe with expression.
  for example, I have a dataframe of </p>
  
  <pre><code>+-----+----------+----------+-----+
  | C1  | C2       |   C3     |C4   |
  +-----+----------+----------+-----+
  |steak|1         |1         |  150|
  |steak|2         |2         |  180|
  | fish|3         |3         |  100|
  +-----+----------+----------+-----+
  </code></pre>
  
  <p>and I want to create a new column C5 with expression "C2/C3+C4", assuming there are several new columns need to add, and the expressions may be different and come from database.</p>
  
  <p>Is there a good way to do this?</p>
  
  <p>I know that if I have an expression like "2+3*4" I can use scala.tools.reflect.ToolBox to eval it.</p>
  
  <p>And normally I am using df.withColumn to add new column.</p>
  
  <p>Seems I need to create an UDF, but how can I pass the columns value as parameters to UDF? especially there maybe multiple expression need different columns calculate.</p>