gpt4 book ai didi

scala - Spark 数据帧 : Pivot and Group based on columns

转载 作者:可可西里 更新时间:2023-11-01 14:20:51 26 4
gpt4 key购买 nike

我有如下输入数据框,其中包含 id、app 和 customer

输入数据框

+--------------------+-----+---------+
| id|app |customer |
+--------------------+-----+---------+
|id1 | fw| WM |
|id1 | fw| CS |
|id2 | fw| CS |
|id1 | fe| WM |
|id3 | bc| TR |
|id3 | bc| WM |
+--------------------+-----+---------+

预期输出

使用 pivot 和聚合 - 将应用值作为列名并将聚合的客户名称作为数据框中的列表

预期的数据帧

+--------------------+----------+-------+----------+
| id| bc | fe| fw |
+--------------------+----------+-------+----------+
|id1 | 0 | WM| [WM,CS]|
|id2 | 0 | 0| [CS] |
|id3 | [TR,WM] | 0| 0 |
+--------------------+----------+-------+----------+

我尝试了什么?

val newDF = df.groupBy("id").pivot("app").agg(expr("coalesce(first(customer),0)")).drop("app").show()

+--------------------+-----+-------+------+
| id|bc | fe| fw|
+--------------------+-----+-------+------+
|id1 | 0 | WM| WM|
|id2 | 0 | 0| CS|
|id3 | TR | 0| 0|
+--------------------+-----+-------+------+

问题:在我的查询中,我无法获得“fw”下“id1”的 [WM,CS] 客户列表(如预期输出所示),只能“WM”来了。类似地,对于“id3”,只有“TR”出现 - 相反,“id3”的“bc”下应该出现一个值为 [TR,WM] 的列表

需要您的建议来分别获取每个应用下的客户列表。

最佳答案

如果您可以在应该为零的单元格中忍受空列表,则可以使用 collect_list:

df.groupBy("id").pivot("app").agg(collect_list("customer")).show
+---+--------+----+--------+
| id| bc| fe| fw|
+---+--------+----+--------+
|id3|[TR, WM]| []| []|
|id1| []|[WM]|[CS, WM]|
|id2| []| []| [CS]|
+---+--------+----+--------+

关于scala - Spark 数据帧 : Pivot and Group based on columns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46228331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com