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

问题描述 投票:0回答:2

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

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

enter image description here

pyspark pyspark-sql pyspark-dataframes
2个回答
0
投票

事实上,有一个为此设计的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|
+--------------------+--------+
|[email protected]   |    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 = "[email protected]"
    check(email) 
    email = "aswinraja.com"
    check(email) 


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

0
投票

您可以使用下面的代码来验证表中的电子邮件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")))
© www.soinside.com 2019 - 2024. All rights reserved.