为了账号安全,请及时绑定邮箱和手机立即绑定

PySpark:按其他表中的子字符串过滤数据帧

PySpark:按其他表中的子字符串过滤数据帧

阿波罗的战车 2023-10-26 15:35:36
我有两个数据框,a 和 b:A:+-----+---------+| word|frequency|+-----+---------+|  git|        5||stack|       10||match|       15||other|        3|+-----+---------+乙:+-------------+---------+|         word|frequency|+-------------+---------+|       github|        5||       match |        2||stackoverflow|       10||      b_entry|        7|+-------------+---------+我想过滤掉数据帧 a 中单词列等于或 b 中任何行的子字符串的所有行,因此所需的输出是:+-----+---------+| word|frequency|+-----+---------+|other|        3|+-----+---------+我知道有一些函数 a.word.contains()、a.word.like()、a.word.rlike() 等可以帮助我测试 a.word 是否有子字符串的条件。这些问题是我最终会得到包含 a.word 值的 b 行,而不是 b.word 包含的 a 行。是否有任何函数可以帮助测试 a.word 是否是另一个表的子字符串?理想情况下,解决方案能够同时对两个表进行操作,而不是直接迭代值,例如 SQL Join。
查看完整描述

1 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

contains()在连接条件中使用withleft_anti作为连接类型。

左反连接返回第一个表中与第二个表中不匹配的所有行。


df_a.show()

+-----+---------+                                                               

| word|frequency|

+-----+---------+

|  git|        5|

|stack|       10|

|match|       15|

|other|        3|

+-----+---------+

df_b.show()

+-------------+-----------+

|       word_1|frequency_1|

+-------------+-----------+

|       github|          5|

|        match|          2|

|stackoverflow|         10|

|      b_entry|          7|

+-------------+-----------+

from pyspark.sql.functions import *


df_a.join(df_b, (df_b.word_1.contains(df_a.word)), "left_anti").show()

+-----+---------+

| word|frequency|

+-----+---------+

|other|        3|

+-----+---------+



查看完整回答
反对 回复 2023-10-26
  • 1 回答
  • 0 关注
  • 79 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信