Apache spark 基于另一个dataframe列值设置列状态
我有两个pyspark数据帧,如下所示 主要目的:Apache spark 基于另一个dataframe列值设置列状态,apache-spark,pyspark,apache-spark-sql,pyspark-dataframes,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Dataframes,我有两个pyspark数据帧,如下所示 主要目的: 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
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\u df:cat2
中的值是否与support\u df:value1
或support\u df:value2
中的值匹配
在上面的示例中,当cat
==cat2
时,有四行支持df。来自main_df
的值是(9,3,11,6
)。其中只有3个和6个在value1
和value2
我想要一个结果数据框,如下所示
cat1 cat2 cat3 cat2_status
a 9 e NotMatched
b 3 f Matched
c 11 g NotMatched
d 6 h Matched
有人能帮助我们如何使用pyspark实现这一点吗(我们需要编写一个用户定义的函数,还是可以使用联接来实现)?使用左联接和
当
表达式创建新列cat2_status
时,如果支持_df
上有任何匹配项:
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|
#+----+----+----+-----------+