【问题标题】:How to compare 2 dataframes in PySpark based on 2 columns?如何基于 2 列比较 PySpark 中的 2 个数据框?
【发布时间】:2018-08-08 07:00:24
【问题描述】:

在 PySpark 中,我试图比较 2 个共同列的数据帧。 Tha 数据帧如下所示:

df1   ...   ...
aa1   ...   ...
bb2   ...   ...
ab3   ...   ...
cc4   ...   ...

df2   ...   ...
a1    ...   ...
b3    ...   ...

这个想法是检查 df1 是否包含带有 df2 子字符串的行。如果是这样,请获取这些行。上面的结果将是:

result
aa1
ab3

或者在伪代码中:

df1.filter(df1.col.likes(df2.col))

提前致谢!

【问题讨论】:

  • 尝试在条件下使用join
  • 规则是什么?为什么你的结果中有 ab3 ?
  • 抱歉,打错了。基本上,您检查第一个数据帧是否包含来自第二个数据帧的值。

标签: python-3.x apache-spark pyspark


【解决方案1】:

您需要leftsemi 加入。

语法为df1.join(df2, how='leftsemi', on="join condition")

from pyspark.sql import functions as F

df1.show()
+---+
|  a|
+---+
|aa1|
|bb2|
|ab3|
|cc4|
+---+

df2.show()
+---+
|  b|
+---+
| a1|
| b3|
+---+

df1.join(F.broadcast(df2), how='leftsemi', on=F.col('a').endswith(F.col('b'))).show()
+---+
|  a|
+---+
|aa1|
|ab3|
+---+

【讨论】:

  • 有没有办法将第二个 df 的列附加到第一个?那么这个解决方案就更完美了!
  • @Kishintai 将leftsemi 替换为inner
  • 我有一个后续问题,删除链接,提前谢谢! stackoverflow.com/questions/61823544/…@史蒂文
猜你喜欢
  • 1970-01-01
  • 2020-02-10
  • 2022-11-13
  • 2020-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 2022-06-30
相关资源
最近更新 更多