如何使用pyspark过滤不包含任何子字符串列表的数据框行

时间:2018-11-06 19:27:41

标签: python apache-spark

我有一个带有Spark 1.6的python DataFrame。例如

DF= ("timestamp","canal", "name")

示例数据:

   [('1980-02-24'),('google.com/General'),('Alice')]
   [('1980-02-24'),('google.com/Dataset'),('bob')]
   [('1980-02-24'),('googleserach.com'),('Malik')]
   [('1980-02-24'),('googlesearch.com/AIPlateforme'),('AliceBob')]
   [('1980-02-24'),('yahooserach.com'),('Bob2')]
   [('1980-02-24'),('yahoosearch.com/AIPlateforme'),('Alice2')]

DF.count() = 6

我想了解所有内容,"canal" not contain substring googleserach.comyahoosearch

我创建了一个变量:

canal_2 = "googleserach.com,yahoosearch"

然后:

解决方案1:

result = DF.filter(~DF.canal.isin (canal_2)) ==> does not work
result.count() = 6

解决方案2:

if (canal2 not in DF.canal) ==> invalid syntax

如何对DataFrame进行过滤以使“运河”不包含googlesearchyahoosearch的行?

谢谢

3 个答案:

答案 0 :(得分:1)

rlikeregex将起作用。

regexNegativeLB= "^/(?!googlesearch|yahoosearch)$"
newDF= DF.filter(DF["canal"].rlike(regexNegativeLB))

https://www.rexegg.com/regex-lookarounds.html-引用负前瞻

答案 1 :(得分:0)

import { logText, Example } from 'example';

// Do some magic here to modify the functionality of logText

new Example();

也有可能。 pyspark没有包含它。

答案 2 :(得分:0)

df.filter(〜df [“ canal”]。isin(canal_2))。collect() 试试这个。