【问题标题】:For loop column expressionfor 循环列表达式
【发布时间】:2021-10-23 11:24:31
【问题描述】:

我正在用多列进行平均表达。有什么方法可以循环我的列列表,以便它可以像下面示例中的序列一样?

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]

【问题讨论】:

    标签: scala dataframe apache-spark pyspark apache-spark-sql


    【解决方案1】:

    你可以这样使用:

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

    【讨论】:

    • 我正在分组,确实有多个列 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: _*)
    

    【讨论】:

      猜你喜欢
      • 2016-02-14
      • 2020-11-22
      • 2021-05-15
      • 1970-01-01
      • 2012-04-29
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多