如何通过传入变量而不是文字来使用多列的 groupBy

Posted

技术标签:

【中文标题】如何通过传入变量而不是文字来使用多列的 groupBy【英文标题】:How can I use groupBy of multiple columns by passing in a variable rather than a literal 【发布时间】:2019-09-07 12:28:36 【问题描述】:

我想创建一个 val ,其中包含我要分组的数据框的列。然后我想将 s 传递给函数 groupBy。

如果我使用只有一列的 val,它正在工作。 我尝试过 Seq、Array 等,但没有运气。

val s = "lastname"

df.groupBy(s)  // <<<<---- WORKING !

val t = Seq("lastname", "firstname")

df.groupBy(t) //  <<<---- NOT WORKING !

【问题讨论】:

试试df.groupBy(t : _*) 不工作 => 此处不允许使用 `: _*' 注释(此类注释只允许在 *-parameters 的参数中使用) 试试df.groupBy(t.head, t.tail : _*)。您必须确保至少有一个元素。 非常感谢!有道理,当我查看 groupBy() 的签名时 【参考方案1】:

在列的 Seq 中转换 Seq 并避免一个元素的情况

import org.apache.spark.sql.functions.col
val t = Seq("lastname", "firstname").map(col(_))
df.groupBy(t:_*)

【讨论】:

【参考方案2】:

这就是将数组传递给 groupBy 的方式

df.groupBy(t.head, t.tail:_*)

【讨论】:

以上是关于如何通过传入变量而不是文字来使用多列的 groupBy的主要内容,如果未能解决你的问题,请参考以下文章

函数将多列作为单列而不是多列返回

在渲染期间,为啥要在 React.createElement 中包装一个函数式组件,而不是通过函数调用来使用它返回的元素呢?

R dplyr如何通过列号而不是通过汇总的列名选择变量

使用通道工厂而不是使用代理或添加服务引用来使用外部 WCF 服务

geom_area 具有分布在多列中的分组变量

地址传入scanf而不是printf [重复]