簡體   English   中英

Pyspark DataFrame 根據另一列過濾列 DataFrame 無連接

[英]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 ,但此操作太繁重,我試圖避免此類操作。 關於如何執行此任務的任何建議?

不確定為什么要避免加入,因為它也可能是計算成本高昂的。

反正

  1. 創建 df2 列的列表
  2. append 上述 1 在 df2 中的不同元素
  3. 過濾掉ID2中包含上面2中元素的地方。

下面的代碼

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM