[英]Set column status based on another dataframe column value pyspark
我有兩個 pyspark 數據幀如下
main_df:
cat1 cat2 cat3
a 9 e
b 3 f
c 11 g
d 6 h
支持_df:
cat value1 value2
cat1 1 2
cat1 3 4
cat1 5 6
cat1 7 8
cat2 1 2
cat2 3 4
cat2 5 6
cat2 7 8
當cat
cat2
時,我需要檢查main_df: cat2
中的值是否與support_df: value1
或support_df: value2
中的任一值匹配。
在上面的示例中,當cat
== cat2
時,support_df 中有四行。 main_df
的值是( 9, 3, 11, 6
)。 其中只有 3 和 6 在value1
和value2
中匹配
我想得到如下結果 dataframe
cat1 cat2 cat3 cat2_status
a 9 e NotMatched
b 3 f Matched
c 11 g NotMatched
d 6 h Matched
有人可以幫助如何使用 pyspark 實現這一點(我們是否需要編寫用戶定義的 function 或者可以使用連接來完成)?
如果support_df
有任何匹配項,則使用左連接和when
表達式創建新列cat2_status
:
from pyspark.sql import functions as F
result = main_df.alias("main").join(
support_df.alias("supp"),
(F.col("supp.cat") == "cat2") &
((F.col("main.cat2") == F.col("supp.value1")) |
(F.col("main.cat2") == F.col("supp.value2"))),
"left"
).select(
"main.*",
F.when(
F.col("supp.cat").isNotNull(), "Matched"
).otherwise("NotMatched").alias("cat2_status")
)
result.show()
#+----+----+----+-----------+
#|cat1|cat2|cat3|cat2_status|
#+----+----+----+-----------+
#| a| 9| e| NotMatched|
#| b| 3| f| Matched|
#| c| 11| g| NotMatched|
#| d| 6| h| Matched|
#+----+----+----+-----------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.