检查 pyspark df 列的值是否存在于其他 pyspark df 列中

And*_*nte 2 python dataframe apache-spark apache-spark-sql pyspark

我有 2 个 pyspark 数据帧,我想检查一列的值是否存在于另一个数据帧的列中。

我只看到了如何过滤存在的值的解决方案(像这样),我需要做的是返回一列 true 或 false。

在 pandas 中,它会是这样的:

df_A["column1"].isin(df_B["column1"])
Run Code Online (Sandbox Code Playgroud)

提前致谢!

mck*_*mck 8

编辑:更干净的方法来做到这一点:

import pyspark.sql.functions as F

result = df1.join(df2.withColumn('flag', F.lit(True)), 'col1', 'left').fillna(False)

result.show()
+----+-----+
|col1| flag|
+----+-----+
|   0| true|
|   1| true|
|   2|false|
+----+-----+
Run Code Online (Sandbox Code Playgroud)

旧答案:

df1 = spark.createDataFrame(([0],[1],[2])).toDF('col1')
df2 = spark.createDataFrame(([0],[1],[3])).toDF('col1')

df1.join(df2, 'col1', 'semi') \
   .distinct() \
   .select('col1', F.lit(True).alias('flag')) \
   .join(df1, 'col1', 'right') \
   .fillna(False, 'flag') \
   .show()

+----+-----+
|col1| flag|
+----+-----+
|   0| true|
|   1| true|
|   2|false|
+----+-----+
Run Code Online (Sandbox Code Playgroud)