首页 > 解决方案 > PySpark - 如果 ID 存在于表 1 和表 2 中,则使用 TRUE 填充表 1 中的列,否则为 FALSE

问题描述

我的目标是在 ID 上将两个表合并在一起。表 2 中的一些不会包含表 1 的所有 ID,这没关系 - 在这些情况下,我想根据两个表中是否存在 ID 来填充第三列的真值或假值。

让我试着阐明我的问题。

假设我有两张桌子:

ID  TIME       ID   TIME
1   1/1/21     2    1/1/21
4   1/1/21     4    1/1/21
7   1/1/21     8    1/1/21

时间表不重要,重要的是 ID 4。我想填写 ID 4 是否在两个表中都存在。最终输出将是这样,参考表 1。

  ID    TIME      EXISTS_BOTH_TABLES
  1     1/1/21    FALSE
  4     1/1/21    TRUE
  7     1/1/21    FALSE

我意识到这可能是一种特殊类型的 Join,但我的斗争也存在于阐明我究竟需要什么。我希望这可以帮助您理解我的问题。

标签: pyspark

解决方案


我没有测试过下面的代码,但你应该按照以下方式做一些事情:

from pyspark.sql.functions import when
df1.join(df2, 'ID', 'left').withColumn('CONVO', when(df2.ID.isNull(), False).otherwise(True))

在 ID 上左连接并检测 ID 何时不匹配以使用 False 填充 convo 列,否则为 true。

如果你想同时做双方,你可以做一个完全连接,并检测 df1.ID 和 df2.ID 的空值。

编辑:我相信你在你的例子中犯了一个错误,在结果表中,ID 7 应该是 True


推荐阅读