Spark多列求均值如何遍历列列表批量生成avg计算表达式?
多列批量求均值表达式生成方案
完全可以通过遍历列名列表的方式批量生成对应表达式,两种语言的正确实现如下:
Scala 实现
核心通过List的map方法批量生成表达式,支持两种写法:
- 字符串表达式适配
selectExpr
val cols = List("col1", "col2", "col3","col4") val expressions = cols.map(colName => s"avg($colName) as $colName") df.selectExpr(expressions:_*)
- Column 对象写法
import org.apache.spark.sql.functions.avg val cols = List("col1", "col2", "col3","col4") val expressions = cols.map(colName => avg(colName).alias(colName)) df.select(expressions:_*)
PySpark 实现
核心通过列表推导式遍历生成表达式,同样支持两种写法:
- Column 对象写法
from pyspark.sql.functions import avg cols = ["col1", "col2", "col3","col4"] exprs = [avg(_col).alias(_col) for _col in cols] df.select(*exprs)
- 字符串表达式适配
selectExpr
cols = ["col1", "col2", "col3","col4"] exprs = [f"avg({_col}) as {_col}" for _col in cols] df.selectExpr(*exprs)
内容的提问来源于stack exchange,提问作者user14710367
相关产品推荐
相关产品推荐

