Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 基于另一个dataframe列值设置列状态_Apache Spark_Pyspark_Apache Spark Sql_Pyspark Dataframes - Fatal编程技术网

Apache spark 基于另一个dataframe列值设置列状态

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

我有两个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      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|
#+----+----+----+-----------+