有没有一种方法可以使用scala过滤spark数据帧中不包含内容的字段



希望我很愚蠢,这会很容易。

我有一个包含"url"one_answers"referr"列的数据帧。

我想提取所有包含顶级域"www.mydomain.com"one_answers"mydomain.co"的引用人。

我可以使用

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

然而,由于某种原因,这会调出网址www.google.co.uk搜索网址,该网址也包含我的域名。有没有一种方法,在spark中使用scala,我可以用谷歌过滤掉任何东西,同时保持正确的结果?

感谢

Dean

您可以使用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"))

您可以使用Regex。在这里,您可以找到在Scala中使用regex的参考资料。在这里,您可以找到一些关于如何为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
} )

这个解决方案需要一些工作,但却是最安全的解决方案。

相关内容

  • 没有找到相关文章

最新更新