检查电子邮件列是否包含 @ 和 。使用 pyspark

Check whether email column contains @ and . using pyspark

我有一个包含 8M 数据的数据帧。有一个列名称 EMAIL 包含我必须检查的电子邮件地址:

  1. 电子邮件值的格式必须为 _@_._
  2. 电子邮件值只能包含字母数字字符以及 -_@.

其实有专门为它设计的Python库,validate_email

您可以使用以下代码片段来验证电子邮件 ID。

from validate_email import validate_email
from pyspark.sql.types import BooleanType
from pyspark.sql.functions import udf

valid_email = udf(lambda x: validate_email(x), BooleanType())

emailvalidation.withColumn('is_valid', valid_email('EmailAddress')).show()

+--------------------+--------+
|               email|is_valid|
+--------------------+--------+
|aswin.raja@gm.com   |    true|
|                abc |   false|
+--------------------+--------+

另一种方法是使用正则表达式。您可以使用以下代码片段。

import re 

regex = '^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$'

def check(email):  

    if(re.search(regex,email)):  
        print("Valid Email")  
    else:  
        print("Invalid Email")  


if __name__ == '__main__' :  

    email = "aswin.raja@gm.com"
    check(email) 
    email = "aswinraja.com"
    check(email) 


+--------+
|Valid   |  
|Invalid | 
+--------+

您可以使用以下代码验证您 table 中的电子邮件 ID。

from pyspark.sql.functions import udf
from pyspark.sql.types import BooleanType
import re 

def regex_search(string):
    regex = '^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$'
    if re.search(regex, string, re.IGNORECASE):
      return True
    return False 

validateEmail_udf = udf(regex_search, BooleanType())
df = df.withColumn("is_valid",validateEmail_udf(col("email")))

这里不需要UDF,直接使用rlike函数即可:

# not really the regex to validate emails but this handles your requirement
r = """^[\w\d-_\.]+\.[\w\d-_\.]+@[\w\d]+\.[\w\d]+$"""

df.withColumn("flag", when(col("email").rlike(regex), lit("valid")).otherwise(lit("invalid")))\
  .show()

给出:

+---+-----+----+-----------------+-------+
|ids|first|last|            email|   flag|
+---+-----+----+-----------------+-------+
|  1|   aa| zxc|aswin.raja@gm.com|  valid|
|  2|   bb| asd|aswin.raja@gm.com|  valid|
|  3|   cc| qwe| aswinraja@ad.com|invalid|
|  4|   dd| qwe|aswin.raja@gm.com|  valid|
|  5|   ee| qws| aswinraja@ad.com|invalid|
+---+-----+----+-----------------+-------+

要使用完整的正则表达式来验证电子邮件地址,请检查此 post