Выход прямо с функцией regexp_replace
.
import spark.implicits._
import org.apache.spark.sql.functions._
val df = Seq("12 https://jhafi.com xyza@gmail.com",
"12 https://jhafi.com xyza@gmail.com",
"12 https://jhafi.com xyza@gmail.com",
"12 https://jhafi.com xyza@gmail.com").toDF("mycol")
val email = """(?i)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b"""
val url ="(https?:\\/\\/(?:www\\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\s]{2,}|www\\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\s]{2,}|https?:\\/\\/(?:www\\.|(?!www))[a-zA-Z0-9]+\\.[^\\s]{2,}|www\\.[a-zA-Z0-9]+\\.[^\\s]{2,})"
val urlRegexExpression = regexp_replace($"mycol", url, "PHTEXTURL")
val emailRegexExpression = regexp_replace($"mycol", email, "PHTEXTEMAIL")
df.withColumn("mycol", emailRegexExpression).withColumn("mycol", urlRegexExpression).show(false)
Выход
+------------------------+
|mycol |
+------------------------+
|12 PHTEXTURL PHTEXTEMAIL|
|12 PHTEXTURL PHTEXTEMAIL|
|12 PHTEXTURL PHTEXTEMAIL|
|12 PHTEXTURL PHTEXTEMAIL|
+------------------------+
Примечание:
Я внес изменения в регулярное выражение вашего URL, так как он не работал.
Надеюсь, это решит вашу проблему.