【问题标题】:how to check a pyspark dataframe value against another dataframe如何根据另一个数据帧检查 pyspark 数据帧值
【发布时间】:2021-08-18 02:46:35
【问题描述】:

我有以下 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()

df 数据框:

id Date
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 数据框:

id
12345
6789
7890
90000

我希望根据 df 与 df1 的比较得到以下输出。

id Check
12345 True
6789 True
12345 True
7890 True
5000 False
80000 False
90000 True
False

【问题讨论】:

  • 你试过什么?这只是一个简单的左连接。
  • df.join(df1, ['id'], 'left').show() 我如何获得真假值
  • 加入后只检查日期是否为空

标签: dataframe pyspark


【解决方案1】:

正如 cmets 中所述,使用左连接。首先我们需要添加一个 df1 的附加列,可帮助我们识别 df1 中的 ID。 然后我们合并列以获得TrueFalse 值:

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|
+-----+----------+-----+

诀窍是在加入之前将检查列添加到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 值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多