gpt4 book ai didi

dataframe - 如何根据另一个数据帧检查 pyspark 数据帧值

转载 作者:行者123 更新时间:2023-12-04 07:35:32 25 4
gpt4 key购买 nike

我在 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
日期


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
查看


12345
真的

6789
真的

12345
真的

7890
真的

5000
错误的

80000
错误的

90000
真的

错误的

最佳答案

正如评论中提到的,使用左连接。首先我们需要添加一个df1的附加列这有助于我们识别 df1 中的 ID .
然后我们合并列得到 TrueFalse值(value)观:

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值。

关于dataframe - 如何根据另一个数据帧检查 pyspark 数据帧值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67762821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com