有没有办法使用 scala 过滤不包含 spark 数据框中某些内容的字段?

Is there a way to filter a field not containing something in a spark dataframe using scala?

希望我是个笨蛋,这会很容易。

我有一个包含列 'url' 和 'referrer' 的数据框。

我想提取所有包含顶级域 'www.mydomain.com' 和 'mydomain.co' 的引荐来源网址。

我可以用

val filteredDf = unfilteredDf.filter(($"referrer").contains("www.mydomain."))

但是,出于某种原因,这会拉出 url www.google.co.uk 搜索 url,其中也包含我的 Web 域。有没有一种方法,在 spark 中使用 scala,我可以在保持正确结果的同时过滤掉其中包含 google 的任何内容?

谢谢

院长

您可以使用 not! 否定谓词,所以剩下的就是添加另一个条件:

import org.apache.spark.sql.functions.not

df.where($"referrer".contains("www.mydomain.") &&
  not($"referrer".contains("google")))

或单独的过滤器:

df
 .where($"referrer".contains("www.mydomain."))
 .where(!$"referrer".contains("google"))

您可以使用 RegexHere you can find a reference for the usage of regex in Scala. And here 您可以找到一些关于如何为 URL 创建正确的正则表达式的提示。

因此在你的情况下你会得到类似的东西:

val regex = "PUT_YOUR_REGEX_HERE".r // something like (https?|ftp)://www.mydomain.com?(/[^\s]*)? should work
val filteredDf = unfilteredDf.filter(regex.findFirstIn(($"referrer")) match {
    case Some => true
    case None => false
} )

此解决方案需要一些工作,但它是最安全的。