Python PySpark:按其他表中的子字符串筛选数据帧
我有两个数据帧,a和b: a: b: 我想过滤掉数据帧a中的所有行,其中字列等于或是b中任何行的子字符串,因此所需的输出是: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
+-----+---------+
| 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|
+-----+---------+