我有一个数据框架如下:
ID match set
1 [1,2]
2 [1,2,3]
3 [2,3]
4 [4]
如果列表中的任何一个值存在于另一个列表
中,我想比较行之间并添加缺失值示例—在第一行中,由于值[1,2]存在于第二行[1,2,3]中,获取缺失值并将其添加到第一行
列表中
ID match set
1 [1,2,3]
2 [1,2,3]
3 [1,2,3]
4 [4]
一种方法是扩展数组以创建一个helper列,并使用该列自连接数据框,然后将id分组并收集回一个不同的数组:
from pyspark.sql import functions as F, Window as W
a = df.select("*",F.explode("match_set").alias("V"))
agg_logic = F.array_sort(F.array_distinct(F.flatten(F.collect_set("match_set"))))
(a.drop("ID").join(a.drop("match_set"),on='V')
.groupby("ID").agg(agg_logic.alias("match_set"))).show()
+---+---------+
| ID|match_set|
+---+---------+
| 1|[1, 2, 3]|
| 2|[1, 2, 3]|
| 3|[1, 2, 3]|
| 4| [4]|
+---+---------+