我正在尝试下一个操作:
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
的输入,但是我无法达到这些值。
是否有尝试的想法?
答案 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(_))
然后groupBy
和agg
:
df.groupBy(...).agg(seqs.head, seqs.tail:_*)