检查电子邮件列是否包含 @ 和 。使用 pyspark
Check whether email column contains @ and . using pyspark
我有一个包含 8M 数据的数据帧。有一个列名称 EMAIL
包含我必须检查的电子邮件地址:
- 电子邮件值的格式必须为
_@_._
- 电子邮件值只能包含字母数字字符以及
-_@.
其实有专门为它设计的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
我有一个包含 8M 数据的数据帧。有一个列名称 EMAIL
包含我必须检查的电子邮件地址:
- 电子邮件值的格式必须为
_@_._
- 电子邮件值只能包含字母数字字符以及
-_@.
其实有专门为它设计的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