检查列 pyspark df 的值是不是存在于其他列 pyspark df
Posted
技术标签:
【中文标题】检查列 pyspark df 的值是不是存在于其他列 pyspark df【英文标题】:Check if values of column pyspark df exist in other column pyspark df检查列 pyspark df 的值是否存在于其他列 pyspark df 【发布时间】:2020-11-27 03:57:55 【问题描述】:我有 2 个 pyspark 数据框,我想检查一列的值是否存在于另一个数据框的列中。
我只看到了如何过滤存在的值的解决方案(like this),我需要做的是返回一个真或假的列。
在 pandas 中会是这样的:
df_A["column1"].isin(df_B["column1"])
提前致谢!
【问题讨论】:
【参考方案1】:您可以收集column1中的所有值,然后从中制作一个广播变量,您可以在其上编写一个udf
from pyspark.sql import udf
from pyspark.sql.types import BooleanType
df_B_col_1_values = df_B.rdd.map(lambda x: x.column1).distinct().collect()
df_B_col_1_values = sc.broadcast(set(df_B_col_1_values))
my_udf = udf(lambda x: x in df_B_col_1_values.value, BooleanType())
df_A = df_A.withColumn('column1_present', my_udf(col('column1'))
【讨论】:
【参考方案2】:编辑:更简洁的方法:
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|
+----+-----+
旧答案:
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|
+----+-----+
【讨论】:
这个编辑后的响应有效 - 两个数据框必须具有相同名称的列(在 mck 的示例中,列是 'col1')并且它按预期工作。以上是关于检查列 pyspark df 的值是不是存在于其他列 pyspark df的主要内容,如果未能解决你的问题,请参考以下文章