Scala-Spark Llama dinámicamente groupby y agg con valores de parámetros

Quiero escribir una función de agrupación y agregación personalizada para obtener los nombres de columna especificados por el usuario y el mapa de agregación especificado por el usuario.No sé los nombres de columna y el mapa de agregación por adelantado. Quiero escribir una función similar a algo como a continuación. Pero soy nuevo en Scala y no puedo resolverlo.

def groupAndAggregate(df: DataFrame,  aggregateFun: Map[String, String], cols: List[String] ): DataFrame ={
  val grouped = df.groupBy(cols)
  val aggregated = grouped.agg(aggregateFun)
  aggregated.show()
}

y quiero llamarlo así

val listOfStrings =  List("A", "B", "C")
val result = groupAndAggregate(df, Map("D"-> "SUM", "E"-> "COUNT"), listOfStrings)

¿Cómo puedo hacer esto? ¿Alguien puede ayudarme por favor?

Respuestas a la pregunta(1)

Su respuesta a la pregunta