如何解决检查数组列是否有重叠元素
我有一个包含两个数组列的数据框,如下所示:
Arrayed_Column_1
[{"ID":222222,"No":2},{"ID":333333,"No":1}]
[{"ID":555555,"No":1},"No":3}]
[{"ID":222222,{"ID":555555,"No":3}]
[{"ID":555555,"No":1}]
Arrayed_Column_2
[{"ID":333333,{"ID":666663,"No":1}]
[{"ID":333333,{"ID":666666,"No":3}]
[{"ID":555333,{"ID":66666,"No":1}]
如何在不使用 explode
函数的情况下过滤列 ID 和列_1 编号的组合也出现在列_2 中的那些行?
我知道 array_contains
函数,但这只检查特定值。
解决方法
尝试使用 arrays_overlap
:
import pyspark.sql.functions as F
col1 = F.expr('transform(column_1,x -> struct(x.ID as ID,x.No as No,x.Value2 as Value2))')
col2 = F.expr('transform(column_2,x.Value2 as Value2))')
df2 = df.filter(F.arrays_overlap(col1,col2))
另一种方法是检查array_intersect
:
df2 = df.filter(F.size(F.array_intersect(col1,col2)) != 0)
,
您也可以使用 exists
+ array_contains
:
df1 = df.filter(
"exists(Arrayed_Column_1,x -> array_contains(Arrayed_Column_2,x))"
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。