title: Speed up spark dataframe groupBy
body: <p>I am fairly inexperienced in Spark, and need help with groupBy and aggregate functions on a dataframe. Consider the following dataframe:</p>
  
  <pre><code>val df = (Seq((1, "a", "1"),
                (1,"b", "3"),
                (1,"c", "6"),
                (2, "a", "9"),
                (2,"c", "10"),
                (1,"b","8" ),
                (2, "c", "3"),
                (3,"r", "19")).toDF("col1", "col2", "col3"))
  
  df.show()
  +----+----+----+
  |col1|col2|col3|
  +----+----+----+
  |   1|   a|   1|
  |   1|   b|   3|
  |   1|   c|   6|
  |   2|   a|   9|
  |   2|   c|  10|
  |   1|   b|   8|
  |   2|   c|   3|
  |   3|   r|  19|
  +----+----+----+
  </code></pre>
  
  <p>I need to group by col1 and col2 and calculate the mean of col3, which I can do using:</p>
  
  <pre><code>val col1df = df.groupBy("col1").agg(round(mean("col3"),2).alias("mean_col1"))
  val col2df = df.groupBy("col2").agg(round(mean("col3"),2).alias("mean_col2"))
  </code></pre>
  
  <p>However, on a large dataframe with a few million rows and tens of thousands of unique elements in the columns to group by, it takes a very long time. Besides, I have many more columns to group by and it takes insanely long, which I am looking to reduce. Is there a better way to do the groupBy followed by the aggregation?</p>