Python PySpark:按其他表中的子字符串筛选数据帧

Python PySpark:按其他表中的子字符串筛选数据帧,python,pyspark,apache-spark-sql,Python,Pyspark,Apache Spark Sql,我有两个数据帧,a和b: a: b: 我想过滤掉数据帧a中的所有行,其中字列等于或是b中任何行的子字符串,因此所需的输出是: +-----+---------+ | word|frequency| +-----+---------+ |other| 3| +-----+---------+ 我知道有些函数a.word.contains()、a.word.like()、a.word.rlike()等可以帮助我测试a.word是否有子字符串的条件。问题是,我最终得到的是包含a.wor

我有两个数据帧,a和b:

a:

b:

我想过滤掉数据帧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。

在连接条件中使用
contains()
,将
left\u anti
作为连接类型。
左反联接返回第一个表中与第二个表中不匹配的所有行

df_a.show()
+-----+---------+                                                               
| word|frequency|
+-----+---------+
|  git|        5|
|stack|       10|
|match|       15|
|other|        3|
+-----+---------+

谢谢工作得很有魅力
+-----+---------+
| word|frequency|
+-----+---------+
|other|        3|
+-----+---------+
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|
+-----+---------+