Pyspark通过与另一行的数组进行比较来追加数组的缺失值



我有一个数据框架如下:

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]|
+---+---------+

最新更新