sparksql中电子邮件地址的拆分



代码:

当长度(中性)>0然后regexp_extract(neutral,"(.*@)",0)else"结束为neutral

上面的查询返回带有@符号的输出值,例如,如果输入为1234@gmail.com,则输出为1234@.如何使用上面的查询删除@符号。并且应该评估结果输出的数字,如果它包含任何非数字字符,则应该被拒绝。

样本输入:1234@gmail.com输出:1234样本输入:123adc@gmail.com输出:空

您可以将正则表达式表述为^[^@]+,它将匹配电子邮件地址中的所有字符,包括但不包括@字符:

REGEXP_EXTRACT(neutral, '^[^@]+', 0) AS neutral

请注意,这种方法也是干净的,使我们不必使用庞大的CASE表达式。

试试这个代码:

val pattern = """([0-9]+)@([a-zA-Z0-9]+.[a-z]+)""".r
val correctEmail = "1234@gmail.com"
val wrongEmail = "1234abcd@gmail.com"
def parseEmail(email: String): Option[String] = 

email match {
case pattern(id, domain) => Some(id)
case _ => None
}

println(parseEmail(correctEmail)) //  prints Some(1234)
println(parseEmail(wrongEmail)) // prints None

此外,使用Options而不是null更为惯用

最新更新