scala – Spark数据帧:基于列的数据透视表和组
发布时间:2020-12-16 09:52:01 所属栏目:安全 来源:网络整理
导读:我用id,app和customer输入如下数据帧 输入数据帧 +--------------------+-----+---------+| id|app |customer |+--------------------+-----+---------+|id1 | fw| WM ||id1 | fw| CS ||id2 | fw| CS ||id1 | fe| WM ||id3 | bc| TR ||id3 | bc| WM |+------
我用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和aggregate – 将app值作为列名,并将聚合的客户名称作为列表添加到数据框中 预期的数据框架 +--------------------+----------+-------+----------+ | id| bc | fe| fw | +--------------------+----------+-------+----------+ |id1 | 0 | WM| [WM,CS]| |id2 | 0 | 0| [CS] | |id3 | [TR,WM] | 0| 0 | +--------------------+----------+-------+----------+ 我试过了什么?
+--------------------+-----+-------+------+ | id|bc | fe| fw| +--------------------+-----+-------+------+ |id1 | 0 | WM| WM| |id2 | 0 | 0| CS| |id3 | TR | 0| 0| +--------------------+-----+-------+------+ 问题:在我的查询中,我无法在“fw”下获得“WM,CS”等“id1”的客户列表(如预期输出中所示),只有“WM”即将到来.类似地,对于“id3”,只出现“TR” – 相反,列表应该在“bc”下为“id3”出现值[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]| +---+--------+----+--------+ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |