将数据框的列转换为Seq [Columns] Scala

时间:2018-06-20 10:08:11

标签: scala apache-spark dataframe aggregation

我正在尝试下一个操作:

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的输入,但是我无法达到这些值。

是否有尝试的想法?

1 个答案:

答案 0 :(得分:0)

如果您可以将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],请执行以下操作:

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

然后groupByagg

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