猿问

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

我有两个数据框,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。


阿波罗的战车
浏览 80回答 1
1回答

千巷猫影

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|+-----+---------+
随时随地看视频慕课网APP

相关分类

Python
我要回答