将 Dataframe 的列转换为 Seq[Columns] Scala
Converting Column of Dataframe to 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
的输入,但我无法达到这些值。
知道如何尝试吗?
如果能把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(_))
然后 groupBy
和 agg
:
df.groupBy(...).agg(seqs.head, seqs.tail:_*)
我正在尝试进行下一个操作:
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
的输入,但我无法达到这些值。
知道如何尝试吗?
如果能把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(_))
然后 groupBy
和 agg
:
df.groupBy(...).agg(seqs.head, seqs.tail:_*)