[英]Join Pyspark Dataframes where two lists share a value
我有两个表单的数据框
df1 =
+------+---------+
|group1| members|
+------+---------+
| 1|[a, b, c]|
| 2|[d, e, f]|
| 3|[g, h, i]|
+------+---------+
df2 =
+------+---------+
|group2| members|
+------+---------+
| 4|[s, t, d]|
| 5|[u, v, w]|
| 6|[x, y, b]|
+------+---------+
我想根据成员列表共享共同值的条件对这些数据框执行连接。 例如, group2
会将 map 放到df1
上,如下所示:
+------+---------+------+
|group1| members|group2|
+------+---------+------+
| 1|[a, b, c]| 6|
| 2|[d, e, f]| 4|
| 3|[g, h, i]| |
+------+---------+------+
有没有一种有效的方法? 目前我只是遍历df2
的行并使用f.array_intersect()
进行比较。
可以使用左连接,连接条件是使用size
function来判断df1和df2的交集大于0。
df2 = df2.toDF('group2', 'members2')
df = df1.join(df2, F.size(F.array_intersect(df1.members, df2.members2)) > 0, 'left').drop('members2')
df.show(truncate=False)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.