我需要在下表中使用pivot。
id,week,score
102,1,96
101,1,138
102,1,37
101,1,59
101,2,282
102,2,212
102,2,78
101,2,97
102,3,60
102,3,123
101,3,220
101,3,87
输出
1 2 3
101 138,59 282,97 220,87
102 96,37 212,78 123,60
这里我需要排序分数
我尝试了以下代码,但只有在特定ID上有一条记录时才能使用
df.groupBy("id").pivot("week").agg(first("score"))
答案 0 :(得分:3)
您应该使用first
收集所有值,而不是collect_list
,这将为您提供列表中的结果
import org.apache.spark.sql.functions._
df.groupBy("id").pivot("week").agg(collect_list("score")).show()
输出:
+---+---------+---------+---------+
|id |1 |2 |3 |
+---+---------+---------+---------+
|101|[138, 59]|[282, 97]|[220, 87]|
|102|[96, 37] |[212, 78]|[60, 123]|
+---+---------+---------+---------+
答案 1 :(得分:1)
from pyspark.sql import functions as F
df.groupBy("id").pivot("week").agg(F.collect_list("score")).show()
如果你查看api文件,你可以看到
collect_list(第e栏)
聚合函数:返回带有重复项的对象列表。
您也可以使用collect_set
,这会为您提供相同的输出,并删除重复项。
df.groupBy("id").pivot("week").agg(F.collect_set("score")).show()
api文件说明如下
collect_set(第e栏)
聚合函数:返回一组消除了重复元素的对象。