首页 > 解决方案 > 将 Dataframe 的列转换为 Seq[Columns] Scala

问题描述

我正在尝试进行下一个操作:

var test = df.groupBy(keys.map(col(_)): _*).agg(sequence.head, sequence.tail: _*)

我知道 agg 中的必需参数应该是Seq[Columns].

然后我有一个包含下一个数据框“expr”:

sequences
count(col("colname1"),"*")
count(col("colname2"),"*")
count(col("colname3"),"*")
count(col("colname4"),"*")

列序列是字符串类型,我想使用每一行的值作为 的输入agg,但我无法达到这些值。

知道如何尝试吗?

标签: scalaapache-sparkdataframeaggregation

解决方案


如果能把sequences列中的字符串改成SQL命令,就可以解决了。Spark 提供了一个函数expr,它接受一个 SQL 字符串并将其转换为一列。具有工作命令的示例数据框:

val df2 = Seq("sum(case when A like 2 then A end) as A", "count(B) as B").toDF("sequences")

要将数据帧转换为Seq[Column]s,请执行以下操作:

val seqs = df2.as[String].collect().map(expr(_))

然后groupByagg

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

推荐阅读