Si tout va bien je suis stupide et ce sera facile.
J'ai un dataframe contenant les colonnes 'url' et 'referrer'.
Je souhaite extraire tous les référents contenant le domaine de premier niveau "www.mondomaine.com" et "mydomain.co".
Je peux utiliser
val filteredDf = unfilteredDf.filter(($"referrer").contains("www.mydomain."))
Toutefois, cette opération extrait l'URL de recherche www.google.co.uk qui contient également mon domaine Web pour une raison quelconque. Existe-t-il un moyen, en utilisant scala in spark, de filtrer tout ce que contient Google tout en conservant les résultats corrects que j'ai?
Merci
Doyen
Vous pouvez annuler le prédicat à l'aide de not
ou !
afin qu'il ne reste plus qu'à ajouter une autre condition:
import org.Apache.spark.sql.functions.not
df.where($"referrer".contains("www.mydomain.") &&
not($"referrer".contains("google")))
ou filtre séparé:
df
.where($"referrer".contains("www.mydomain."))
.where(!$"referrer".contains("google"))
Vous pouvez utiliser une Regex
. Ici vous pouvez trouver une référence pour l’utilisation de regex dans Scala. Et ici vous pouvez trouver quelques astuces sur la création d’une expression rationnelle appropriée pour les URL.
Ainsi, dans votre cas, vous aurez quelque chose comme:
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
} )
Cette solution nécessite un peu de travail mais est la plus sûre.