【发布时间】:2018-11-29 10:25:16
【问题描述】:
我正在尝试进行下一个操作:
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 的输入,但我无法达到这些值。
知道如何尝试一下吗?
【问题讨论】:
-
如果
expr数据框包含 SQL 命令,则可以转换为列。否则,查找列名并在之后应用col和count可能会更容易。 -
表达式是用scala格式写的 sum(when(col("Column").like("Value"), col("Column")) 就是一个例子,所以我认为expr方式不适合这里。我不太理解你所说的第二种方法。你能提供一个简单的例子吗?或者一个扩展的解释,谢谢
-
第二种方法只有在表达式相同但在不同列上时才可行(如问题中所示)。从您的评论看来,表达方式有所不同。
-
关于“如果 expr 数据框包含 SQL 命令,则可以转换为列”您到底指的是什么?例如我可以有 sum(CASE WHEN "column" LIKE "value" THEN "Column" END) AS
alias一个 SQL 表达式 -
是的,这是可能的。我添加了一个答案来更详细地解释它。
标签: scala apache-spark dataframe aggregation