【发布时间】:2018-02-23 23:34:56
【问题描述】:
我输入的数据框如下所示,带有 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| 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] 的列表
需要您的建议以分别获取每个应用下的客户列表。
【问题讨论】:
标签: scala hadoop apache-spark spark-dataframe