检查电子邮件列是否包含@和。使用pyspark
我有一个包含8M数据的数据框。有一个列名检查电子邮件列是否包含@和。使用pyspark,pyspark,pyspark-sql,pyspark-dataframes,Pyspark,Pyspark Sql,Pyspark Dataframes,我有一个包含8M数据的数据框。有一个列名EMAIL包含我必须检查的电子邮件地址: 电子邮件值的格式必须为@.\u 电子邮件值只能包含字母数字字符和-\u@. 事实上,有一个Python库专门为它设计,validate\u email 您可以使用下面的代码段来验证电子邮件id from validate_email import validate_email from pyspark.sql.types import BooleanType from pyspark.sql.functions i
EMAIL
包含我必须检查的电子邮件地址:
@.\u
-\u@.
事实上,有一个Python库专门为它设计,
validate\u 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 |
+--------+
您可以使用以下代码验证表中的电子邮件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")))
此处无需自定义项,只需使用函数:
# 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|
+---+-----+----+-----------------+-------+
要让完整的正则表达式验证电子邮件地址,请检查此嗨,它给了我一个错误“没有名为“验证电子邮件地址”的模块”,因为我尝试从验证电子邮件地址导入验证电子邮件地址@aamirmalik124,这是
validate\u email
,您需要先安装模块。是否有其他方法可以做到这一点,因为我使用的是数据块,无法安装任何python库。@aamirmalik124您可以始终使用正则表达式来验证电子邮件ID。我将编辑我的答案。是的,请编辑。代码运行正常,但当我显示结果数据帧时,其显示错误“作业因阶段失败而中止:阶段357.0中的任务5失败4次,最近的失败:阶段357.0中的任务5.3丢失(TID 16904,10.139.64.4,executor 29):org.apache.spark.api.python.python异常:回溯(最近一次呼叫最后):“你能帮我吗?你能添加正则表达式来验证电子邮件吗。