Dataframe 如何对照另一个数据帧检查pyspark数据帧值

Dataframe 如何对照另一个数据帧检查pyspark数据帧值,dataframe,pyspark,Dataframe,Pyspark,下面是pyspark数据帧df,我想检查id是否存在于另一个数据帧df1中,并为每一行返回true和false from pyspark.sql import SparkSession from pyspark.sql.functions import * import pyspark.sql.functions as F # Create SparkSession data=[["12345","2020-02-01"],["6789&qu

下面是pyspark数据帧df,我想检查id是否存在于另一个数据帧df1中,并为每一行返回true和false

from pyspark.sql import SparkSession
from pyspark.sql.functions import *
import pyspark.sql.functions as F

# Create SparkSession

data=[["12345","2020-02-01"],["6789","2019-03-01"],["12345","2021-03-01"],["7890",""],["5000","2021-21-01"],["80000","1900-01-01"],["90000","2000-01-01"],["","2000-01-01"]]
df=spark.createDataFrame(data,["id","Date"])
df.show()

data=[["12345"],["6789"],["7890"],["90000"]]
df1=spark.createDataFrame(data,["id"])
df1.show()

测向数据帧:

身份证件 日期 12345 2020-02-01 6789 2019-03-01 12345 2021-03-01 7890 5000 2021-21-01 80000 1900-01-01 90000 2000-01-01 2000-01-01
正如在注释中提到的,使用左连接。首先,我们需要添加一个
df1
的附加列帮助我们识别
df1
中的ID。 然后我们合并列以获得
True
False
值:

from pyspark.sql import functions as f
df.join(df1.withColumn('Check', f.lit(True)), on="id", how='left')\
    .withColumn("Check", f.coalesce("Check", f.lit(False))).show()
结果:

+-----+----------+-----+
|   id|      Date|Check|
+-----+----------+-----+
| 5000|2021-21-01|false|
|90000|2000-01-01| true|
| 6789|2019-03-01| true|
| 7890|          | true|
|80000|1900-01-01|false|
|12345|2020-02-01| true|
|12345|2021-03-01| true|
|     |2000-01-01|false|
+-----+----------+-----+
诀窍是在联接之前将check列添加到
df1
。执行

df.join(df1.withColumn('Check', f.lit(True)), on="id", how='left')
结果:

+-----+----------+-----+
|   id|      Date|Check|
+-----+----------+-----+
| 5000|2021-21-01| null|
|90000|2000-01-01| true|
| 6789|2019-03-01| true|
| 7890|          | true|
|80000|1900-01-01| null|
|12345|2020-02-01| true|
|12345|2021-03-01| true|
|     |2000-01-01| null|
+-----+----------+-----+

现在我们需要合并
Check
列,以得到所需的
True/False
值。

您尝试了什么?这只是一个简单的left join.df.join(df1,['id'],'left')。show()如何获取真值和假值加入后必须检查日期是否为空