Для выражения столбца цикла

#scala #dataframe #apache-spark #pyspark #apache-spark-sql

Вопрос:

Я делаю среднее выражение с несколькими столбцами. Есть ли способ, которым я могу зациклить свой список столбцов, чтобы он был похож на мою последовательность в примере ниже?

 val cols = List("col1", "col2", "col3","col4")
val expressions = Seq("avg(col1) as col1","avg(col2) as col1", "...")

df.selectExpr(expressions:_*)
 

**Эквивалент Pyspark

 exprs = [avg(_col).alias(_col) for _col in cols]
 

Ответ №1:

Вы можете использовать что-то вроде этого:

 val cols = List("col1", "col2", "col3","col4")
val expressions = cols.map(colName => avg(col(colName)).as("col1"))
df.select(expressions:_*)
 

Комментарии:

1. Я делаю группировку, чтобы у нее было несколько столбцов df.groupBy(groupbycols).agg(*exprs) ** pyspark

Ответ №2:

Это должно сработать для вас.

   val cols = List("col1", "col2", "col3", "col4")
  val expressions = cols.map(c => avg(c).as(c))

  df.groupBy(cols.head, cols.tail: _*).agg(expressions.head, expressions.tail: _*)