[英]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.