示例数据框:
values = [(1, 111, 211),(2, 121, 221),(1, 112, 212),(3, 131, 231),(4, 141, 241),(3, 132, 232)]
df1 = spark.createDataFrame(values,['id','col1', 'col2'])
df.show()
输出:
+---+----+----+
| id|col1|col2|
+---+----+----+
| 1| 111| 211|
| 2| 121| 221|
| 1| 112| 212|
| 3| 131| 231|
| 4| 141| 241|
| 3| 132| 232|
+---+----+----+
col1和col2上的聚合:
from pyspark.sql.functions import col, lower, collect_list, collect_set
df1.groupby("id").agg(collect_list("col1").alias("col1s"),
collect_list("col2").alias("col2s")).show()
输出:
+---+----------+----------+
| id| col1s| col2s|
+---+----------+----------+
| 1|[111, 112]|[211, 212]|
| 3|[131, 132]|[231, 232]|
| 2| [121]| [221]|
| 4| [141]| [241]|
+---+----------+----------+
这两个集合中元素的顺序相同。
col1s[0]
,col2s[0]
代表同一行中的数据。
但是,如果数据量巨大并且在多个分区之间分割,会发生什么?