有没有办法使用 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"))
您可以使用 Regex
。 Here 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
} )
此解决方案需要一些工作,但它是最安全的。
希望我是个笨蛋,这会很容易。
我有一个包含列 '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"))
您可以使用 Regex
。 Here 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
} )
此解决方案需要一些工作,但它是最安全的。