pyspark 数据框分组
pyspark dataframe grouping
我正在使用 pyspark,我有一个如下所示的 df:
id
time
group
1
4
A
1
14
A
1
22
B
2
16
B
2
23
B
2
100
C
3
13
C
3
10
C
我想像这样建立一个新的“结果”栏目:
| id| result|
|:---- |:------|
| 1| [A -> 18 , B ->22]|
| 2| [B -> 39 , C -> 100] |
| 3| [C -> 23]
您可能需要 2 个聚合级别:
from pyspark.sql import functions as F
out = df.groupBy("id","group").agg(F.sum("time").alias("time"))\
.groupBy("id").agg(F.map_from_arrays(*[F.collect_list("group"),
F.collect_list("time")])
.alias("result"))
out.show()
+---+-------------------+
| id| result|
+---+-------------------+
| 1| {B -> 22, A -> 18}|
| 3| {C -> 23}|
| 2|{B -> 39, C -> 100}|
+---+-------------------+
我正在使用 pyspark,我有一个如下所示的 df:
id | time | group |
---|---|---|
1 | 4 | A |
1 | 14 | A |
1 | 22 | B |
2 | 16 | B |
2 | 23 | B |
2 | 100 | C |
3 | 13 | C |
3 | 10 | C |
我想像这样建立一个新的“结果”栏目:
| id| result|
|:---- |:------|
| 1| [A -> 18 , B ->22]|
| 2| [B -> 39 , C -> 100] |
| 3| [C -> 23]
您可能需要 2 个聚合级别:
from pyspark.sql import functions as F
out = df.groupBy("id","group").agg(F.sum("time").alias("time"))\
.groupBy("id").agg(F.map_from_arrays(*[F.collect_list("group"),
F.collect_list("time")])
.alias("result"))
out.show()
+---+-------------------+
| id| result|
+---+-------------------+
| 1| {B -> 22, A -> 18}|
| 3| {C -> 23}|
| 2|{B -> 39, C -> 100}|
+---+-------------------+