Apache spark Spark:使用groupBy列的值作为聚合列的名称

Apache spark Spark:使用groupBy列的值作为聚合列的名称,apache-spark,Apache Spark,我想给出聚合列名,其中包含一个groupBy列的值: dataset .groupBy("user", "action") .agg(collect_list("timestamp").name($"action" + "timestamps") 此部分:.name$action不起作用,因为name需要的是字符串而不是列。基于: 有趣的部分与列重命名。我们应该重命名除前两列以外的所有列 val renames = res.schema.names.drop(2).map (n =

我想给出聚合列名,其中包含一个groupBy列的值:

dataset
   .groupBy("user", "action")
   .agg(collect_list("timestamp").name($"action" + "timestamps")
此部分:.name$action不起作用,因为name需要的是字符串而不是列。

基于:

有趣的部分与列重命名。我们应该重命名除前两列以外的所有列

val renames = res.schema.names.drop(2).map (n => col(n).as(n + "_timestamp"))
res.select((col("user") +: renames): _*).show


+----+-----------+-----------+
|user|a_timestamp|b_timestamp|
+----+-----------+-----------+
|  U1|        [1]|         []|
|  U2|         []|        [2]|
+----+-----------+-----------+

你在找支点吗?groupBy可以为其返回多个不同的值action@ArtemAliev我不认为它是重复的-对于一个典型的Spark初学者来说,pivot可以用来解决列重命名问题并不明显。这个问题不值得投反对票,但它肯定是重复的。谢谢!你的重命名部分很复杂,但是很好。我使用了一种更简单的方法,通过withColumnRenameda,a_时间戳。withColumnRenamedb,b_时间戳,但它只有在预定义了数据透视值时才可行。
val renames = res.schema.names.drop(2).map (n => col(n).as(n + "_timestamp"))
res.select((col("user") +: renames): _*).show


+----+-----------+-----------+
|user|a_timestamp|b_timestamp|
+----+-----------+-----------+
|  U1|        [1]|         []|
|  U2|         []|        [2]|
+----+-----------+-----------+