希望我很愚蠢,这会很容易。
我有一个包含"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
} )
这个解决方案需要一些工作,但却是最安全的解决方案。