我有以下Dataframe
+-----+-----+------+
|group|label|active|
+-----+-----+------+
| a| 1| y|
| a| 2| y|
| a| 1| n|
| b| 1| y|
| b| 1| n|
+-----+-----+------+
我想按“group”列分组,按“label”列收集,同时过滤active列中的值。
预期结果是
+-----+---------+---------+----------+
|group| labelyes| labelno |difference|
+-----+---------+---------+----------+
|a | [1,2] | [1] | [2] |
|b | [1] | [1] | [] |
+-----+---------+---------+----------+
我可以很容易地得到过滤器的“y”标签
val dfyes = df.filter($"active" === "y").groupBy("group").agg(collect_set("label"))
对于“n”值也是如此
val dfno = df.filter($"active" === "n").groupBy("group").agg(collect_set("label"))
但我不明白在过滤时是否可以同时聚合,以及如何得到这两个集合的差异。
2条答案
按热度按时间bwntbbo31#
谢谢@mck的帮助。我找到了另一种解决问题的方法,那就是用
when
聚合期间:m4pnthwp2#
您可以进行透视,并使用一些数组函数来获得差异: