[英]Pyspark DataFrame Filter column based on a column in another DataFrame without join
我有一个名为df1
的 pyspark dataframe,如下所示:
ID1 | ID2 |
---|---|
啊啊啊 | a1 |
bbbb | a2 |
啊啊啊 | a3 |
bbbb | a4 |
cccc | a2 |
我还有另一个名为df2
的 dataframe,如下所示:
ID2_1 | ID2_2 |
---|---|
a2 | a1 |
a3 | a2 |
a2 | a3 |
a2 | a1 |
其中第一个 dataframe 中 ID2 的值与第二个 dataframe 中 ID2_1、ID2_2 列中的值匹配。
因此,结果 dataframe 将如下所示:
ID1 | ID2 |
---|---|
啊啊啊 | a1 |
bbbb | a2 |
啊啊啊 | a3 |
cccc | a2 |
(第四行被过滤掉了)
我想过滤 ID2 列以仅包含出现在 ID2_1 或 ID2_2 列之一中的值。 我试着做
filter= df1.filter((f.col("ID2").isin(df2.ID2_1)))|
(f.col("ID2").isin(df2.ID2_2)))
但这似乎不起作用。 我已经看到其他建议在两列之间使用join
,但此操作太繁重,我试图避免此类操作。 关于如何执行此任务的任何建议?
不确定为什么要避免加入,因为它也可能是计算成本高昂的。
反正
下面的代码
new = (df1.withColumn('x', array_distinct(array(*[lit(x) for x in [item for sublist in g for item in sublist]]))).where(array_contains(col('x'), col('ID2'))).drop('x'))
new.show(truncate=False)
+----+---+
|ID1 |ID2|
+----+---+
|bbbb|a2 |
|aaaa|a3 |
|cccc|a2 |
+----+---+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.