如何通过传入变量而不是文字来使用多列的 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 中包装一个函数式组件,而不是通过函数调用来使用它返回的元素呢?