我如何根据组对行进行配对?

how I can pair rows with respect of a group?

如何将每一行的元素配对成一个组?

id    title    comp
1       'A'      45
1       'B'      32
1       'C'      1
2       'D'      5
2       'F'      6

输出:

如果他们有相同的行,我想配对 'id'

output:

id    title      comp
1    'A','B'    45,32
1    'B','C'    32,1
2    'D','F'     5,6

使用window函数。收集目标列中直接连续元素的列表。通过使用 array_join 将结果数组转换为字符串来删除数组括号。最后一行将有更少的元素。过滤掉列表中少于 0ne 个元素的地方。

from pyspark.sql.functions import *

from pyspark.sql import Window
win=Window.partitionBy().orderBy(F.asc('title')).rowsBetween(0,1)


 df.select("id", *[F.array_join(F.collect_list(c).over(win),',').alias(c) for c in df.drop('id').columns]).filter(length(col('comp'))>1).show()

+---+-----+-----+
| id|title| comp|
+---+-----+-----+
|  1|  A,B|45,32|
|  1|  B,C| 32,1|
|  1|  C,D|  1,5|
|  2|  D,F|  5,6|
+---+-----+-----+